首页 > 解决方案 > 在子模块中使用 .gitattributes 作为合并策略

问题描述

我有两个主要分支,它们有一个子模块,但指向该子模块的两个不同分支。

我想要的是在两个主要分支之间合并/变基时忽略任何子模块更改。

我试图用来.gitattributes忽略子模块(名为internal)的任何合并冲突。

目前我有internal merge=ours.gitattributes但它不工作,它无法合并internal子模块。

还有其他合并策略可以满足我的需求吗?或者我在使用中做错了.gitattributes什么?

标签: gitgitattributes

解决方案


子模块作为gitlink条目记录在超级项目中。gitlink 存储了超级项目 Git 将用于命令子模块 Git 到子模块git checkout中的原始哈希 ID。(除了 gitlink,您还需要.gitmodules文件内容来提供初始克隆所需的附加信息,但是一旦发生克隆,这些详细信息就会从.gitmodules文件移动到您的超级项目的配置中。因此.gitmodules内容变得无关紧要:只有 gitlink 重要.)

合并驱动程序告诉 Git 如何合并文件。gitlink 条目不是文件,因此合并驱动程序在此处无效。当 Git 合并三个提交时——合并基础和两个分支提示——并且合并基础和两个分支提示都有不同的哈希 ID 存储在 gitlink 中,您将遇到合并冲突,并且您所做的任何事情都不会自动解决它. 您必须手动解决它。


推荐阅读