2

我们通过 TortoiseHg 将 Mercurial 与“工作台”一起使用。

在合并分支时,我们经常发现默认的(自动?)更新选择不是我们想要的。我们想将该工具配置为始终提示任何合并操作。

每个分支都有一些我们需要在两者之间保持最新的核心文件,还有一些需要保留的特定于分支的文件。

如果我们更新一个分支中的核心文件,我们希望进行合并以获取另一个分支中的最新核心文件。然而,默认的 TortoiseHg 会进行我们不想要的自动更新。

例子:

1) 分支“1”包含一个文件“1.xls”,分支“2”有一个等效的“2.xls”,它们以二进制形式存储。将“1”合并到基于“2”的工作目录会导致删除“2.xls”并添加“1.xls”。

2) 分支“1”包含一个更新的文件“not_core.c”,它在分支“2”中有一个等效的“not_core.c”。将“1”合并到基于“2”的工作目录会导致“2”中的“not-core.c”自动更新。

3) 分支“1”包含更新的文件“core1.c”和“core2.c”。将“1”合并到基于“2”的工作目录会导致两个文件的自动更新,当我们希望提示允许我们选择是否更新这些核心文件时。也许我们现在只想要'core1.c'。

我已经看到在 mercurial.ini 中设置 'mergetool.premerge = false' 的参考,并尝试了一些变体但没有成功。

理想的设置是为每个不同的文件触发图形手动解析。

任何人都可以提供支持所描述功能的配置吗?

谢谢,伊恩

4

2 回答 2

3

三种描述的案例在您的案例中具有不同的性质,您必须针对不同的案例使用不同的技巧

案例 2 和 3(牧场文件中的非冲突更改)可以通过禁用 TortoseHG 中的自动合并来覆盖(TBT!)(主菜单 - File- Settings- Global setting- TortoiseHG- “自动解决合并”:False /default - True/)

对于案例 1(和其他非内容更改 - 重命名、更改属性)情况更糟,自动合并不起作用:合并从一个分支到另一个分支的更改的镜像历史记录,即如果在共同的父级中你只有 2.xls,它已删除|在源分支中重命名为 1.xls 此更改将反映在目标中。

您可以尝试在此类合并中使用不同的“内部”合并工具(当您更喜欢仅从一个分支更改时 - “虚拟合并”) - 内部:本地和内部:其他。但是 - 它们仅适用于更改的内容(再次!)

也许在从 TipsandTricks 部分进行合并时保留“我的”或“他们的”文件会有所帮助(您可以在 [aliases] 中将提到的 merge-revert-resolve 加入到新命令中,并在需要时使用它而不是普通合并)

于 2013-04-17T20:35:32.673 回答
0

您可以使用 的merge-patternsmerge-tools部分进行配置hgrc。这种设置允许我强制在我的测试中使用 kdiff3:

[merge-patterns]
** = noautomerge

[merge-tools]
noautomerge.executable = kdiff3
noautomerge.args = $base $local $other -o $output --qall
noautomerge.priority = 1
noautomerge.premerge = False

这将关闭 Mercurial 所做的自动预合并并改为启动 kdiff3。

它将对所有文件执行此操作,但如果可能的话,您最好将该merge-patterns部分修改为更具体一点。

此外,请注意您的合并工具可能会自动解决合并本身的问题,如果发生这种情况,请查找命令行选项以关闭该功能。

于 2013-04-17T13:43:53.333 回答