首页 > 解决方案 > merge=ours 的 git 属性不起作用

问题描述

我在 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。是这样吗,还是我做错了什么?

编辑:按照下面的第一个答案,我手动编辑了我的.git/config文件以添加:

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

我在文件末尾添加了它,然后我再次尝试合并......但也没有用。

标签: gitatlassian-sourcetreegitattributes

解决方案


看起来您正在尝试在那里定义自定义合并驱动程序。文档告诉您应该在另一个文件中执行此操作,然后引用它。这甚至在版本 2.18.0 中也成立。

合并驱动程序的定义是在.git/config文件中完成的,而不是在gitattributes文件中,所以严格来说,这个手册页是一个错误的地方来谈论它。参考

如果我看一下示例,我会看到:

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

filfregit 配置文件中定义的位置。这至少应该解决您问题的第 2 部分,我建议您在那里尝试这种不同的方法。

对于第 1 部分,这里git config --global merge.ours.driver true给出了已接受的答案,尽管我觉得其他答案更准确。事实上,接受的答案是由原始问题作者提供的,并没有提供太多内部信息。在修复不起作用的情况下,也可以使用已知的极端情况。您是否考虑过替代方法


推荐阅读