5

如何在GIT中禁用自动合并?

目的是在调用命令链期间在自动合并中具有与冲突合并解决相同的行为:

$ git fetch
$ git merge some_branch
$ git mergetool

最后一个命令引导我们在合并冲突的情况下对文件进行 3 路合并。我想有一种简单的方法来对文件执行相同的 3 路合并,而不会发生冲突合并。

我在互联网上找不到任何解决方案,有吗?

我有一些解决方法,但它宁愿避免它。

提前致谢,

阿列克斯

4

2 回答 2

6

对于仅在一侧或另一侧进行的更改,您可以通过取消设置merge属性来防止自动合并(请参阅“执行三向合并”下的gitattributes )。为缺少合并属性(或将其设置为“二进制”)的路径名进行的合并将使工作树中当前分支的版本离开,并使路径名的索引条目处于冲突状态。

如果你想鼓励每个人都这样工作,你可以放入一个.gitattributes文件并提交它。如果您只想为自己执行此操作,则可以将其放入未提交的.gitattributes文件中或将其放入存储库的$GIT_DIR/info/attributes文件中(您可以随意添加/删除/重命名以启用/禁用该属性)。

#    repository/.git/info/attributes
# OR
#    .gitattributes
* -merge

如果双方进行相同的更改,即使这种配置也不会引起冲突。

于 2010-06-26T05:19:12.703 回答
5

诀窍是,git 解决合并的方式是:

  • 总是基于 3 路合并(因为提交图允许很容易地获得一个共同的祖先)
  • 总是无缝的,除了冲突(过程得到你的协助)

因此,即使您定义了合并驱动程序,除非存在某种冲突,否则它不会启动。


尝试的第一个设置是定义一个合并属性 Unset

未设置

取当前分支的版本作为暂定合并结果,并声明合并有冲突。这适用于没有明确定义的合并语义的二进制文件。

你会写在一个.gitattributes文件中

 * -merge

,看看这是否足以触发所有合并文件的合并工具。


这个“未设置”功能不是直接选项的一个原因git merge是:

尝试在文件级别取消设置 3 路合并不是该合并过程的一部分(这也是树级别的原因)。
所以它更适合作为可以为一组特定文件设置的属性。

于 2010-06-26T05:16:19.213 回答