Git:具有特定文件夹内容的分支在每个仓库中保持不同(在合并中不予考虑)

时间:2013-08-20 17:17:34

标签: git github fork git-merge pull-request

我需要两个连接(分叉)存储库来拥有一个公共文件夹,在同步两个存储库(两个方向)时不考虑其内容。以这种方式,在同步时不需要手动干预,以防止意外覆盖/合并/添加。

更多详情:

考虑存储库A(私有)和fork F(公共)。在每个存储库中都有一个文件夹/myprecious

在存储库A中,myprecious文件夹包含大量文件,并且正在积极处理并且需要成为存储库的一部分。在fork F中,同一文件夹只包含通常不会被修改的文件子集(占位符)。

从fork F接收拉取请求时,myprecious文件夹应保持原样,不添加,删除或修改任何内容。同样,当将A的更改提取到fork F时,不应接收myprecious文件夹的更改和添加但忽略。

是否可以通过子模块将myprecious包含在repo A中(即将文件夹的内容移动到自己的存储库中),同时删除fork F中的子模块链接,将其替换为不同的(非子模块)内容?这项工作是否会发生合并冲突?或者有更好,更简单的方法来设置它吗?

1 个答案:

答案 0 :(得分:1)

从你的描述来看,听起来像子模块就是你要找的东西。这将涉及一些额外的步骤。 在分叉时,您还需要init子模块并获取最新的提交文件。 也许两个分支需要维护一个被推送,所以任何分叉的人都会在子模块和另一个本地分支中获得额外的文件。

添加更多详情:

这就是它的工作原理:

  • 创建git repo myprecious。
  • 在repo A中,添加子模块myprecious。
  • 在myprecious目录中添加存根文件并在子模块中提交这些更改
  • 当您离开myprecious目录时,您会看到子模块的更改。
  • 将这些更改添加为A中的提交并与全世界共享。

现在当有人要求回复A时,如果他们这样做:

git submodule init
git submodule update

他们将使用存根文件更新子模块。

现在进行本地更改:

  • 如果您对子模块中的回购A进行了任何更改
  • 你可以提交它们并将它们推回到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/