git,与工具合并,而不是与工具解决

问题描述 投票:0回答:1

我来自水银,有这个东西我不知道如何与git一起使用。

在商业上,在合并过程中,有冲突文件的每个版本(基础版本,其他版本和本地版本)在我最喜欢的合并工具(kdiff3或meld)上并排显示。我合并它们,保存结果,每个人都很高兴。

使用git,我git merge,如果发生冲突,我git mergetool ...,我得到的文件充满了这种混乱的混乱局面:

first line
<<<<<<< HEAD
local line
=======
other line
>>>>>>> other-branch
last line

如何配置git打开我喜欢的合并工具之前发生冲突?我想手动合并,而不是手动解决:)

git git-merge mergetool
1个回答
0
投票

((初步注释:我不使用任何这些工具。相反,我将merge.conflictStyle设置为diff3,这在工作树文件中使用了略有不同的标记格式。大多数时候,我可以轻松地解析如果太乱了,我有时会用vim直接提取三个输入,例如git show。但是每个人都不一样,所以请看git show :1:path。)

如何配置git打开我喜欢的合并工具之前发生冲突?

你不能。好吧,如果您编写了自己的合并strategy(相当于Git: How configure KDiff3 as merge tool and diff tool),则可以,但是多年来,没有人做过这种事情,因为这太难了。幸运的是,您不需要需要:

我想手动合并,而不是手动解决:)

如果发生冲突,Git会尝试将其合并到工作树文件中。1这就是您在编辑器中看到的内容。但是Git将三个输入文件留在了Git调用的地方,分别是indexstaging area和(现在很少是)cache。这是同一事物的三个名称:staging area是指您使用它的方式,而cache是指它的各个内部方面,而index是一种毫无意义的术语。在这种情况下,“索引”一词可能是最好的用法,我将在这里使用它。

运行git merge-recursive时,Git应该在所有三个输入文件上启动所选的合并工具,再加上第四个(带有冲突标记的Git尝试合并)工作树文件。然后,该工具可以向您显示这些各种输入中的一些或全部。然后,您可以使用该工具以其本身起作用的任何方式手动进行解析,如果愿意,可以<>。[请注意,git mergetool提供给合并工具的三个输入文件(合并--ours的基本,左或本地,以及右或远程或--theirs)只是临时文件。它们将不会用作合并结果。当合并工具向Git指示完成合并时,将

will

用作合并结果的文件是主要的工作树文件:其中包含混乱的文件。因此,您的工具必​​须使用合并结果覆盖此文件。

[与Mercurial不同,核心Git没有内置的合并工具(嗯,除了它自己的默认工具以外-它始终可以运行,作为您使用git mergetool选择的合并策略的一部分)。因此,您或为您设置Git发行版的某人必须告诉Git

如何

运行任何特定的外部合并工具。通常,每个Git installation都具有一组预先配置的外部合并工具,这些工具可能包含也可能不包含您想要的一个。如果您需要配置自己的外部合并工具,请参见-s(尽管标题如此,但在非Windows系统上,它的某些答案很好。请参见Git on Windows: How do you set up a mergetool?。)您的合并工具必须处理的四个名称作为环境变量提供:CB Bailey's answer in particular命名合并基础文件(从索引中的暂存槽#1开始),$BASE命名$LOCAL文件(暂存槽#索引中的2),--ours命名$REMOTE文件(暂存槽#3),--theirs$MERGED期望合并工具在成功或失败之前进行更新的文件的名称到git mergetool脚本。

2


1

请记住,Git在您的工作树中存储了文件的可用副本,但实际上是根据(间接)存储在索引中的特殊Git格式文件构建提交的。在发生冲突的合并期间,Git使用非零索引槽号将所有三个输入文件保留在索引中。 Git认为自己解决的文件会进入正常的零槽索引条目,从而消除了非零槽,因此此处三个输入文件不容易使用。 (在我看来,这是一个缺陷,但是Git并没有征求我的意见。从技术上讲,Git甚至不将文件的条目写入非零索引槽,只要它可以在处理文件时对其进行简单合并即可。这是可能是为了提高速度和/或懒惰。)

2

您的工具应该通过其操作系统级别的退出代码来指示成功或失败。如果这样做,并且在将git mergetool设置为trustExitCode的情况下配置了此工具,则true将知道是否自动git mergetool git add文件。如果将$MERGED配置为trustExitCodefalse将使用一些试探法来猜测是否认为该工具成功合并了文件。
© www.soinside.com 2019 - 2024. All rights reserved.