我需要两个连接的(分支的)存储库有一个公共(public)文件夹,在同步两个存储库(双向)时不考虑其内容。以这种方式在同步时不需要手动干预以防止意外覆盖/merge/添加。
更多详情:
考虑存储库 A(私有(private))和分支 F(公共(public))。在每个存储库中都有一个文件夹 /myprecious
。
在存储库 A 中,myprecious
文件夹包含大量文件,并且正在积极处理,需要成为存储库的一部分。在 fork F 中,同一文件夹仅包含通常不会被修改的文件(占位符)的子集。
当收到来自 fork F 的 pull 请求时,myprecious
文件夹应该保持原样,没有添加、删除或修改任何内容。同样,当将 A 的更改提取到 fork F 时,不应接收而是忽略 myprecious
文件夹的更改和添加。
是否有可能通过子模块将 myprecious
包含在 repo A 中(即将文件夹的内容移动到它自己的存储库),同时删除 fork F 中的子模块链接,将其替换为不同的(非子模块) ) 内容?这会在没有 merge 冲突的情况下工作吗?或者是否有更好、更简单的设置方法?
最佳答案
根据您的描述,子模块听起来像是您要找的东西。这将涉及一些额外的步骤。 fork 时,您还需要初始化子模块并获取最新提交的文件。 也许需要维护两个分支,其中一个要被推送,以便 fork 它的任何人都将在子模块和另一个本地分支中获得这些更改以及额外的文件。
添加更多细节:
这就是它的工作原理:
- 创建 git repo myprecious。
- 在 repo A 中,添加子模块 myprecious。
- 在 myprecious 目录中添加 stub 文件并在子模块中提交这些更改
- 当您离开 myprecious 目录时,您会看到子模块的变化。
- 将这些更改添加为 A 中的提交并与世界分享。
现在当有人 fork repo A 时,如果他们这样做:
git submodule init
git submodule update
他们将使用 stub 文件更新子模块。
现在进行本地更改:
- 如果您在子模块中对 Repo A 进行任何更改
- 您可以提交它们并将它们推回 repo 子模块。
- 但是只要您不在 repo A 中提交更改的子模块,fork repo A 的人就不会得到任何这些更改。
非子模块的替代方案:
如果不跟踪/提交在 A/myprecious 中完成的本地更改,您可以考虑使用:
git update-index --assume-unchanged <files>
参见:http://blog.pagebakers.nl/2009/01/29/git-ignoring-changes-in-tracked-files/
关于Git:具有特定文件夹内容的分支在每个 repo 中保持不同(不考虑 merge ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18341173/