每当我执行hg rebase
并且存在合并冲突时,它将立即为我拉出编辑器来解决冲突。但是,它没有提供任何有关我在变基过程中所处位置的信息。例如,如果我的历史记录如下:
o 12
|
o 11
|
10 o |
\ /
o 9
在执行hg rebase -s 11 -d 10
时尝试应用11或12可能会有冲突。仅从合并冲突停止的地方一目了然,尤其是当图形大于此范围时,很难一目了然。我怎么知道冲突在重新定位过程中的什么位置?
答案 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-template
和hg help templates
。
mergemarkertemplate
mergemarkertemplate
控制您在编辑器中看到的冲突标记。设置[ui] mergemarkers=detailed
,看看是否足够;如果不是,则可以使用[ui] mergemarkertemplate
对其进行自定义;也可以基于每个合并工具对其进行自定义,因此请参见hg help config.ui.mergemarkers
,hg help config.ui.mergemarkertemplate
和hg help config.merge-tools
。
kdiff3
之类的合并工具通常可以自定义标签。在默认配置中,该名称应该是base / local / other的操作提供的名称(在上面的示例中,分别为base
,working copy
和merge 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/MergeToolConfiguration和https://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
希望有帮助。