使用 .gitattributes 和 merge=ours 的正确方式是什么?

18
我刚尝试使用 .gitattributes,但似乎不起作用。我觉得可能是我在使用 merge=ours 属性时出了问题。我有两个分支:一个是“master”,另一个是“GCE-Site”。在“GCE-Site”分支上有一些文件具有与“master”分支上不同的设置,我不希望这些设置合并到“master”(或其他分支)中。在两个分支上,我都有一个 .gitattributes 文件,其中包含以下规则:
README.md merge=ours
config.php merge=ours
.gitattributes merge=ours
.gitignore merge=ours
.cache/ merge=ours

需要遵循规则的所有文件都在根目录及其上层目录,另外还包括.cache/文件夹。当我执行git merge GCE-Site命令时,所有文件仍然合并到主分支,而我并不想要这样。

我是否遗漏了什么?非常感谢您的帮助。谢谢。

2个回答

15
一旦我知道该怎么做,问题就很容易解决了:我在本地环境中忘记添加合并策略,需要使用git config --global merge.ours.driver true命令。

2
我相信如果可以使用快进合并,这将不起作用。 - Jason Hu
我看到了这个并尝试了一下,但对我来说没有用,所以请问有人可以帮忙吗?如何合并两个文件的时间?该怎么解决? - kiran_ray

5
如在“.gitattributes和一个文件的单独合并策略”中所述:
合并驱动程序仅在非平凡情况下调用,即如果主分支和测试分支都触及设置(您需要首先定义合并驱动程序ours)。
您可以在“如何告诉git始终选择我的本地版本以解决特定文件上的冲突合并?”中看到并发修改的示例(即在两个分支中进行修改)。
因此,如果您的合并没有涉及在两个分支中同时修改cache/文件夹中的文件,则从未调用您的合并驱动程序。
但是在您的情况下,对于具有不同设置的文件,我建议不要使用合并驱动程序,而是使用内容过滤器驱动程序,例如“保留分支中的设置”。
这样可以使您在版本控制中保留以下内容:
- cache/文件夹中设置的模板文件。 - 能够获取模板文件并根据检出的分支替换值占位符的脚本。 内容过滤器驱动程序

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接