在mercurial中进行合并时忽略空格

时间:2011-04-07 15:34:44

标签: mercurial merge whitespace

我们在Mercurial合并时遇到问题,其中空白更改导致合并冲突,这些冲突掩盖了我们可能遇到的任何“真实”冲突,并使合并成为一场噩梦。我们最近已经采用了一种格式化风格,它改变了某些分支中文件的缩进,因此合并几乎不可能。

举个例子,试试:

hg init testrepo
cd testrepo/

echo "This is text." > newfile.txt
hg add newfile.txt
hg commit -m "Created a file."
hg branch newbranch
echo "This is some more text." > newfile.txt
hg commit -m "Changed text in the file."
hg update default
echo "   This is text." > newfile.txt
hg commit -m "Added indentation whitespace."

这导致两个分支,一个具有空格更改,另一个具有文本更改:

@  2     "   This is text".
|    
|
| o  1   "This is some more text."
|/     
|
o  0     "This is text."

在此尝试hg merge时,我遇到合并冲突。如果我们在每一行都有冲突,那么解决“真正的”冲突就变得困难和耗时。我更喜欢的是合并过程认为“好的,变更集2第1行与空格仅在空格中有所不同,所以考虑不变。选择变更集1第1行作为合并结果。”

2 个答案:

答案 0 :(得分:10)

忽略空格是合并工具的选择。您可以配置所有合并工具以与mercurial一起使用,如下所示:MergeToolConfiguration

Mercurial的内部预合并不会/不能忽略空格,但是如果你的外部合并工具没有,它只发现空白更改,它将立即退出,如果发现其他空格更改,它可以隐藏空白更改当它加载时。

例如,使用热门的kdiff3 merge tool,您可以启用“空格2/3文件合并”设置,并告诉它是向左还是向右选择。

Tl; Dr:在合并工具中打开它,而不是在mercurial中。

答案 1 :(得分:0)

这种情况是否难以擦洗空白?如果没有,我会编写一个简单的脚本,在签入之前擦除所有空格以避免这种情况。缺点是您会丢失格式,但大多数IDE都可以轻松地为您恢复格式化。

替代方法是在签入之前使用标准格式化程序执行相反的操作...在应有的位置添加空格。

相关问题