3

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

更多细节:

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

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

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

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

4

1 回答 1

1

根据您的描述,听起来 submodule 是您正在寻找的。这将涉及一些额外的步骤。分叉时,您还需要初始化子模块并获取最新提交的文件。也许需要维护两个分支来推送一个分支,这样任何分叉它的人都会在子模块和另一个带有额外文件的本地分支中获得这些更改。

添加更多细节:

所以这就是它的工作方式:

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

现在,当有人分叉回购 A 时,如果他们这样做:

git submodule init
git submodule update

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

现在进行本地更改:

  • 如果您在子模块中的 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/

于 2013-08-20T17:35:44.710 回答