merge=ours的git属性不起作用

tyg4sfes  于 2023-02-28  发布在  Git
关注(0)|答案(2)|浏览(369)

我在Windows上使用的是Sourcetree 3.0.12,我使用的命令行git版本是git version 2.18.0.windows.1(至少当我从Sourcetree打开终端并得到Cygwin命令行时,它是这么说的)。
我希望我的树中app/Resources/上的所有文件都受到“保护”,不受其他分支的更改;换句话说,我希望git总是把我的版本合并到那个文件夹中,所以我做了以下操作:
1)在命令行中,在树的根目录下,我键入了git config --global merge.ours.driver true
2)在我的树的根处,我创建了一个.gitattributes文件,该文件表示:

app/Resources/ merge=ours

然后我尝试合并另一个分支中的更改......结果在app/Resources中的文件中出现了很多冲突。
我读到一个不经意的评论,说这个特性只适用于更新版本的git。是这样吗,还是我做错了什么?
EDIT:按照下面的第一个答案,我手工编辑了我的.git/config文件,添加了以下内容:

[merge "ours"]
    name = ours
    driver = true

我把它添加到文件的末尾,然后我又试着合并......但也不起作用。

8ehkhllq

8ehkhllq1#

看起来你试图在那里定义一个自定义的合并驱动程序。docs告诉你应该在另一个文件中这样做,然后引用它。即使在2.18.0版本中也是如此。
合并驱动程序的定义是在.git/config文件中完成的,而不是在gitattributes文件中,因此严格地说,本手册页不适合讨论它。
如果我看一下这些例子,我会发现:

ab* merge=filfre
abc -foo -bar
*.c frotz

filfre是在git配置文件中定义的,这至少可以解决你问题的第二部分,我建议你尝试不同的方法。
在第1部分中,git config --global merge.ours.driver true被作为可接受的答案here给出,尽管我觉得另一个答案要准确得多。实际上,可接受的答案是由原问题作者给出的,里面没有提供太多信息。在修复不起作用的情况下,也可以使用已知的极端情况。您考虑过alternative approach吗?

eivnm1vs

eivnm1vs2#

你应该加上

app/Resources/* merge=ours

在你的.gitattributes里。

相关问题