如何在 GIT 中禁用自动合并?
目的是在命令链调用期间,对于自动合并的冲突解决与冲突合并具有相同的行为:
$ git fetch
$ git merge some_branch
$ git mergetool
如果合并时没有冲突,最后一条命令将引导我们进行三方文件合并。我希望有一种简单的方法在无冲突合并的情况下执行相同的三方合并。
我在Internet上找不到任何解决方案,有吗?
我有一些解决方法,但宁愿避免使用它们。
提前感谢您的帮助,
Aleks
如何在 GIT 中禁用自动合并?
目的是在命令链调用期间,对于自动合并的冲突解决与冲突合并具有相同的行为:
$ git fetch
$ git merge some_branch
$ git mergetool
如果合并时没有冲突,最后一条命令将引导我们进行三方文件合并。我希望有一种简单的方法在无冲突合并的情况下执行相同的三方合并。
我在Internet上找不到任何解决方案,有吗?
我有一些解决方法,但宁愿避免使用它们。
提前感谢您的帮助,
Aleks
merge
属性(请参见“执行三方合并”下的gitattributes)来防止自动合并。对于缺少合并属性(或将其设置为“binary”)的路径名所进行的合并将使当前分支中的版本保留在工作树中,并将路径名的索引条目保留在冲突状态。
如果您希望鼓励每个人都按照这种方式工作,可以将其放入.gitattributes
文件中并提交。如果您只想为自己这样做,可以将其放入未提交的.gitattributes
文件中,或将其放入存储库的$GIT_DIR/info/attributes
文件中(您可以随意添加/删除/重命名以启用/禁用属性)。
# repository/.git/info/attributes
# OR
# .gitattributes
* -merge
如果在两侧进行了相同的更改,即使采用此配置,也不会导致冲突。
诀窍在于,Git解决合并的方法是:
因此,即使定义了合并驱动程序,除非出现某种冲突,否则它不会启动。
首先尝试的设置是定义一个合并属性未设置(Unset)。
未设置
将当前分支的版本作为初步合并结果,并声明合并存在冲突。这适用于没有明确定义的合并语义的二进制文件。
您需要在.gitattributes
文件中编写。
* -merge
请检查是否足以触发所有合并文件上的合并工具。
这个“未设置(unset)”功能不是 git merge
直接提供的选项,原因如下:
试图在文件级别上取消三方合并并不属于合并过程的一部分(再次强调,合并是在树形结构上进行的)。
因此,更适合作为一个属性,可以针对特定的一组文件进行设置。
* -merge
行并使用git checkout -m -- path/to/file
。如果您想要脚本化的方式,您将需要使用git merge-index git-merge-one-file -- path/to/file
,或者自己调用git merge-file
。 - Chris Johnsen