如何将 Diffuse 设置为 Mercurial 的三向合并工具并从中间窗格保存到目标中

How to set up Diffuse as Mercurial's 3-way merge tool and save from the middle pane into target

我正在使用 Mercurial(在 Debian 系统上)和 Diffuse 作为处理三向合并的首选合并工具。但是,使用 thg 的 mergetools.rc(位于 https://bitbucket.org/tortoisehg/thg/src/8d587fe951d9dd9ad41f532151a0d17372535d01/contrib/mergetools.rc#lines-243)的默认设置,Mercurial 在第一个窗格中传递 $local,在第二个窗格中传递 $base,在第三个窗格中传递 $other。 $local 是存储库中的实际文件,其他两个都是 /tmp 中的文件,名称分别为 "FILENAME~base.XXXXXX.EXT" "FILENAME~other.XXXXXX.EXT".

现在从我对 3 向合并和具体 Diffuse 的理解来看,包括 Diffuse 默认在启动时聚焦中间窗格这一事实,在我看来我应该从(左←)第一个面板(本地)和(右→)最后一个面板(其他)到中间面板(基础),然后将其保存为实际 repo 中的目标文件。

如前所述,这个目标文件实际上是由 hg 传递到第一个窗格中的。因此,要使用默认设置做到这一点,我需要 "Save File As..." 中间窗格,然后手动输入目标文件的路径名。至少,那是我直到今天所做的。这明显不舒服。

其他一些合并工具似乎允许使用“-o”开关指定输出(目标)文件名,但 Diffuse 没有这样的开关。所以,我的问题是,我应该如何设置 Diffuse 并将其与 Mercurial 一起使用,以避免这种不舒服的另存文件为舞蹈?

我创建了一个交换文件的脚本,然后使用名称(对 hg)是 $base $local $other 的顺序调用 Diffuse。这意味着中间窗格接收“$local”文件名(那么实际上是 BASE),这是我要将中间窗格保存到的目标。在 https://bitbucket.org/ecm/diffuse-swap/commits/fdd8357ab5a1fb7e1743e169fa11c3ec7f635e97

(在确定这个解决方案之前,我考虑过在这里问这个问题。我在网上没有发现其他人有这个问题,所以我想为其他有同样问题的人提供我的问题和答案.这就是为什么我要回答我自己的问题。)