我们使用Mercurial(+ Tortoise Hg)作为VCS,使用Kdiff作为差异和合并工具.
有些文件会自动合并,有时这个自动合并结果很奇怪:
public static Method() <<<<<<< local { DoSmth(); } ======= { DoSmth2(); } >>>>>>> other
似乎kdiff对文件中未解决的冲突没有做任何事情,但将其标记为已解决.也许kdiff有时不理解diff文件格式?hg和kdiff集成中的一些错误?
也似乎最近出现了这个问题,可能是新版本的hg/tortoise hg/kdiff的问题?
我们正在使用:
Windows 7 x64
TortoiseHg和Mercurial 3.6.1
Kdiff 0.9.98
来自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
即使手动合并也会出现问题.脚步:
开始变装
Tortoise Hg说:'有冲突'
单击"工具解析",Kdiff打开
在这里!父1(中间列)包含'dest','source'作为文件的一部分.但是这个文件中没有这样的行.
似乎HG给kdiff文件提供了一些Kdiff不能/不可理解的差异信息.
这是Mercurial 3.6.0和3.6.1中的一个错误.它在3.6.2中得到修复.
解决:仅在合并完全完成后恢复.orig(issue4952)
引用原始报告:
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)我看到的行为:
将合并工具(.ugrc/mercurial.ini中的[ui]合并)设置为internal:merge
创建具有两个单独分支的存储库,每个分支上都有一个更改,以使更改彼此冲突.
合并两个分支头.internal:merge将使用冲突标记保留冲突文件.
运行"hg resolve --tool = kdiff3".
预期结果:KDiff3正确显示共享祖先内容和两个冲突修订(请参阅Expected.jpg).
实际结果:KDiff3正确显示共享祖先修订版和"其他"冲突修订版,但本地冲突修订版包含来自internal:merge的合并标记(请参阅Actual.jpg).
THG内置的KDiff3配置以及mercurial/default.d/mergetools.rc内置的KDiff3配置会出现问题.使用仅由kdiff3.executable组成的准系统配置不会发生这种情况,但是当您添加参数并使用$ local时会发生这种情况.因此看起来$ local的处理已经改为简单地使用文件的当前本地内容而不是来自本地分支的合并父级的内容.
此行为始于3.6.0.