使用用子模块替换目录的fork合并上游存储库

时间:2014-08-12 23:56:28

标签: git merge git-submodules

为一家小型软件公司工作,我最近遇到了许多合并冲突,试图从第三方上游存储库中获取更改。

问题在于上游存储库包含大量不断增长的二进制资产。

经过一番考虑,我们决定将它们剥离并将它们放入子模块中。

由于原始仓库的维护者反对使用二进制资产以及第三方库的子模块,这会使合并更改产生一些困难。

这里最好的策略是什么?

我一直在考虑添加.gitattributes文件并定义"我们的"合并主存储库的目标,然后单独拉入所有子模块的更改。

还有什么更直接的吗?也许一种使子模块在合并期间的行为与原始目录一样的方法?

PS:它可能并不重要。但最初的回购是在Github,而我们的存储在bitbucket上。

编辑:我刚刚意识到原始仓库的维护者已将.gitattributes添加到.gitignore。这可能会使应用合并策略变得更加困难,不是吗?

1 个答案:

答案 0 :(得分:0)

通过使二进制文件夹成为二进制文件,可以用gitlink (a special entry which records the SHA1 of the submodule repo you are using)替换索引中的文件夹条目。

这意味着来自上游的任何合并都应该忽略该条目。

在" How to make git ignore a directory while merging"中描述了一种简单的方法,您可以合并而不立即提交,并重置/ path / to / folder

但是在合并其余的repo后,你仍然需要更新该二进制文件夹的内容。


OP通过脚本merge-upstream.sh管理这些步骤。

  

在该剧本中:

     
      
  • 我确保初始化和更新子模块(显然这是在进行合并之前的要求),
  •   
  • 添加上游远程目标和
  •   
  • 通过运行" git add *"解决合并冲突然后是3秒超时和" git commit -m 'upstream merge'"。
  •   
     

我仍然需要添加几行来为子模块进行更改,