2

我们使用 Mercurial (+Tortoise Hg) 作为 VCS,使用 Kdiff 作为差异和合并工具。

有些文件会自动合并,有时这种自动合并结果很奇怪:

    public static Method()
<<<<<<< local
    {
        DoSmth();
    }
=======
    {
        DoSmth2();
    }
>>>>>>> other

似乎 kdiff 对文件中未解决的冲突没有做任何事情,而是将其标记为已解决。也许 kdiff 有时不理解 diff 文件格式?hg 和 kdiff 集成中的一些错误?

也好像最近出现了这个问题,可能是新版本的hg/tortoise hg/kdiff的问题?

我们正在使用:

  • 视窗 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

更新:

即使手动合并也会出现问题。脚步:

  • 开始变基
  • 乌龟汞说:“有冲突” 合并失败
  • 单击“工具解析”,Kdiff 打开 克迪夫

就在这里!父 1(中心列)包含“dest”、“source”作为文件的一部分。但是这个文件中没有这样的行。

似乎 HG 向 kdiff 文件提供了一些 Kdiff 无法/不能理解的差异信息。

4

3 回答 3

7

这是 Mercurial 3.6.0 和 3.6.1 中的一个错误。它已在 3.6.2 中修复。

  • 解决:仅在合并完全完成后恢复 .orig ( issue4952 )

引用原始报告:

乔纳森·利特尔 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] 合并)设置为 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 开始。

于 2016-01-11T16:36:08.370 回答
1

您显示的合并结果看起来非常像另一个合并工具的结果,即 internal:merge

由于您可以为不同的文件类型或文件配置不同的合并工具 - 或者明确地为某个合并提供合并工具 - 您确定您没有使用除 kdiff 之外的其他合并工具吗?可能是新的 tortoiseHG 版本(重新)定义了一些合并工具设置。

在配置文件中验证合并工具的配置。请参阅https://www.mercurial-scm.org/wiki/KDiff3了解它应该如何查找 kdiff3。为方便起见报价:

[extensions]
hgext.extdiff =

[extdiff]
cmd.kdiff3 =

[merge-tools]
kdiff3.args = $base $local $other -o $output
于 2016-01-11T09:59:17.240 回答
1

我们使用 Mercurial (+Tortoise Hg) 作为 VCS,使用 Kdiff 作为差异和合并工具。

展示下!我想查看 THG 的Global Setting-TortoiseHG选项卡(或 THG 的特定于存储库的设置)的屏幕截图,或 ini 文件的相关部分(更好、更短)。这是我的 mercurial.ini 的一部分,其中 p4merge 作为全局差异合并工具

[ui]
merge = p4merge
...
[tortoisehg]
vdiff = p4merge

有些文件会自动合并,有时这种自动合并结果很奇怪

<<<<<<<>>>>>>>字符串是另一个合并的标志:internal:merge3 带有冲突标记

通常不建议这样做,因为 Mercurial 在成功完成合并后不会获得直接反馈,并且与现代工具相比,它的用户友好性不是很高。

必须正确配置所选工具:KDiff3 是 GUI 工具,每次无法自动执行合并(有冲突)时都会出现在屏幕上,这是您的职责 - 在 KDiff 窗口中执行编辑结果的手工工作

于 2016-01-11T10:05:22.193 回答