我们使用Mercurial(+ Tortoise Hg)作为VCS,使用Kdiff作为差异和合并工具。
有些文件会自动合并,有时这个自动合并结果很奇怪:
public static Method()
<<<<<<< local
{
DoSmth();
}
=======
{
DoSmth2();
}
>>>>>>> other
似乎kdiff对文件中未解决的冲突没有做任何事情,但将其标记为已解决。 也许kdiff有时候不了解diff文件格式? hg和kdiff集成中的一些错误?
最近似乎出现了这个问题,可能是新版hg / tortoise hg / kdiff的问题?
我们正在使用:
来自mercurial.ini:
[ui]
merge = kdiff3
[tortoisehg]
editor=VisualStudio
vdiff=meld
[merge-tools]
meld.executable = C:\Program Files (x86)\Meld\meld.exe
meld.priority = 1
meld.premerge = False
meld.args = $local $base $other
[diff]
git = True
即使手动合并也会出现问题。 步骤进行:
就在这里!父1(中间列)包含&#39; dest&#39;,&#39; source&#39;作为文件的一部分。但是这个文件中没有这样的行。
似乎HG向kdiff文件提供了一些差异信息,Kdiff无法理解。
答案 0 :(得分:6)
这是Mercurial 3.6.0和3.6.1中的一个错误。它在3.6.2中修复。
引用原始报告:
Jonathan Little 2015-11-13 17:41:55 UTC
我遇到了Mercurial 3.6中引入的以下问题。我使用TortoiseHG 3.6运行版本3.6 + 20151109,但问题似乎是hg核心(请参阅我的THG错误报告:https://bitbucket.org/tortoisehg/thg/issues/4354)我看到的行为:
- 将合并工具(.hgrc / mercurial.ini中的[ui]合并)设置为内部:merge
- 创建一个包含两个独立分支的存储库,每个分支都有一个更改,以便更改相互冲突。
- 合并两个分支头。 internal:merge将使冲突标记保留冲突文件。
- 运行&#34; hg resolve --tool = kdiff3&#34;。
预期结果:KDiff3正确显示共享祖先内容和两个相互冲突的修订(请参阅Expected.jpg)。
实际结果:KDiff3显示共享的祖先修订版和&#34;其他&#34;正确冲突修订,但本地冲突修订包含来自internal:merge的合并标记(参见Actual.jpg)。
THD内置KDiff3配置,以及mercurial / default.d / mergetools.rc内置的KDiff3配置,会出现问题。使用仅由kdiff3.executable组成的准系统配置不会发生这种情况,但是当您添加参数并使用$ local时会发生这种情况。所以似乎$ local的处理已经改为简单地使用文件的当前本地内容而不是来自本地分支的合并父级的内容。
此行为以3.6.0开始。
答案 1 :(得分:1)
您显示的合并结果非常类似于另一个合并工具的结果,即internal:merge
由于您可以为不同的文件类型或文件配置不同的合并工具 - 或明确地为某个合并提供合并工具 - 您确定没有使用其他合并工具而不是kdiff吗?可能是一个新的tortoiseHG版本(重新)定义了一些合并工具设置。
验证配置文件中合并工具的配置。有关kdiff3的查找方式,请参阅https://www.mercurial-scm.org/wiki/KDiff3。为方便起见:
[extensions]
hgext.extdiff =
[extdiff]
cmd.kdiff3 =
[merge-tools]
kdiff3.args = $base $local $other -o $output
答案 2 :(得分:1)
我们使用Mercurial(+ Tortoise Hg)作为VCS,使用Kdiff作为差异和合并工具。
显示它!我希望看到THG的Global Setting
- TortoiseHG
标签(或THG的特定于存储库的设置)或ini文件的相关部分的屏幕截图(更好,更短)。这是我的mercurial.ini的一部分,p4merge作为全局差异合并工具
[ui]
merge = p4merge
...
[tortoisehg]
vdiff = p4merge
有些文件会自动合并,有时这种自动合并结果很糟糕
<<<<<<<
和>>>>>>>
字符串是另一个合并的标志:internal:merge3 with conflict markers
通常不推荐这样做,因为Mercurial在成功完成合并后没有直接反馈,与现代工具相比,它不是非常友好。
您必须正确配置所选工具:KDiff3是GUI工具,当合并不能时,将每次 自动执行(有冲突),这是你的职责 - 在KDiff窗口中执行编辑结果的手工作业