为一家小型软件公司工作,我最近遇到了许多合并冲突,试图从第三方上游存储库中获取更改。
问题在于上游存储库包含大量不断增长的二进制资产。
经过一番考虑,我们决定将它们剥离并将它们放入子模块中。
由于原始仓库的维护者反对使用二进制资产以及第三方库的子模块,这会使合并更改产生一些困难。
这里最好的策略是什么?
我一直在考虑添加.gitattributes文件并定义"我们的"合并主存储库的目标,然后单独拉入所有子模块的更改。
还有什么更直接的吗?也许一种使子模块在合并期间的行为与原始目录一样的方法?
PS:它可能并不重要。但最初的回购是在Github,而我们的存储在bitbucket上。 编辑:我刚刚意识到原始仓库的维护者已将.gitattributes添加到.gitignore。这可能会使应用合并策略变得更加困难,不是吗?答案 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'
"。我仍然需要添加几行来为子模块进行更改,