在“汞基变基”冲突期间,我如何看待自己在历史上的地位?

时间:2019-04-25 19:05:23

标签: version-control mercurial

每当我执行hg rebase并且存在合并冲突时,它将立即为我拉出编辑器来解决冲突。但是,它没有提供任何有关我在变基过程中所处位置的信息。例如,如果我的历史记录如下:

      o  12
      |
      o  11
      |
10 o  |  
    \ /
     o  9

在执行hg rebase -s 11 -d 10时尝试应用11或12可能会有冲突。仅从合并冲突停止的地方一目了然,尤其是当图形大于此范围时,很难一目了然。我怎么知道冲突在重新定位过程中的什么位置?

2 个答案:

答案 0 :(得分:2)

最近的Mercurials有两个配置选项:[ui] mergemarkertemplate[ui] pre-merge-tool-output-template,可以用来稍微改善这种情况。

pre-merge-tool-output-template

在运行任何外部合并工具之前,将打印

pre-merge-tool-output-template。这可以在您的编辑器或kdiff3弹出之前用于打印某些内容。请注意,如果您使用基于终端的合并工具(例如大多数编辑器,除非它们是gui版本,否则它们会被合并工具隐藏)。根据操作系统和所用程序的不同,您可以按Ctrl-Z暂停合并工具以查看此输出。

示例输出:

merging path/to/file

Running merge tool for path/to/file (/usr/bin/vim):
- local (working copy): 10:2d1f533d add binary file (#2) tip default
-          base (base): 6:abcd1234 some other description default
-    other (merge rev): 9:1e7ad7d7 add binary file (#1) default
... vim runs here ...

有关生成该输出的模板,请参见https://www.mercurial-scm.org/repo/hg/file/14589f1989e9/tests/test-merge-tools.t#l1956,有关该模板的更多信息,请参见hg help config.ui.pre-merge-tool-output-templatehg help templates

mergemarkertemplate

mergemarkertemplate控制您在编辑器中看到的冲突标记。设置[ui] mergemarkers=detailed,看看是否足够;如果不是,则可以使用[ui] mergemarkertemplate对其进行自定义;也可以基于每个合并工具对其进行自定义,因此请参见hg help config.ui.mergemarkershg help config.ui.mergemarkertemplatehg help config.merge-tools

带有可自定义标签的程序

kdiff3之类的合并工具通常可以自定义标签。在默认配置中,该名称应该是base / local / other的操作提供的名称(在上面的示例中,分别为baseworking copymerge rev。我相信,如果您有[ui] mergemarkers=detailed[merge-tools] kdiff3.mergemarkers=detailed,它们将包含更多信息。有关每个合并工具配置选项的更多信息,请参见hg help config.merge-tools

答案 1 :(得分:0)

(确切地说,这不是一个答案,但要发表评论的时间有点长...)

写时:

  

执行hg rebase -s 11 -d 10可能会在尝试应用时发生冲突   10或11。

您是要写

  

尝试应用11或12可能会有冲突

?因为您正在尝试将这些cset重新设置为10,所以谈论应用10毫无意义。此外,如果还没有使用,请考虑使用Evolve扩展。它使所有内容都只能追加,效果更好。

此外,在克隆中进行测试。而且,如果可能,请尝试首先重新设置12基准。无论如何,Mercurial只是试图将11和12的更改重新设定基础,我不认为这可以区分这些更改。你为什么期望它呢?您难道不知道哪些更改属于哪个cset?

如果还没有,请考虑配置合并设置以与kdiff3一起使用。这使在合并编辑器中执行操作变得更加清晰,并且您还可以清楚地看到合并的两面。看到 https://www.mercurial-scm.org/wiki/MergeToolConfigurationhttps://www.mercurial-scm.org/wiki/KDiff3

我个人~/.hgrc中有以下几行,但是它们已经存在了很长时间,而且我不记得我从哪里得到的。另外,这些天我并没有做太多合并。但是,不管它有什么价值……

[merge-tools]
kdiff3.args=--auto --L1 base --L2 local --L3 other $base $local $other -o $output
kdiff3.regkey=Software\KDiff3
kdiff3.regappend=\kdiff3.exe
kdiff3.fixeol=True
kdiff3.gui=True
kdiff3.diffargs=--L1 '$plabel1' --L2 '$clabel' $parent $child

希望有帮助。