我们在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行作为合并结果。”
答案 0 :(得分:10)
忽略空格是合并工具的选择。您可以配置所有合并工具以与mercurial一起使用,如下所示:MergeToolConfiguration
Mercurial的内部预合并不会/不能忽略空格,但是如果你的外部合并工具没有,它只发现空白更改,它将立即退出,如果发现其他空格更改,它可以隐藏空白更改当它加载时。
例如,使用热门的kdiff3 merge tool,您可以启用“空格2/3文件合并”设置,并告诉它是向左还是向右选择。
Tl; Dr:在合并工具中打开它,而不是在mercurial中。
答案 1 :(得分:0)
这种情况是否难以擦洗空白?如果没有,我会编写一个简单的脚本,在签入之前擦除所有空格以避免这种情况。缺点是您会丢失格式,但大多数IDE都可以轻松地为您恢复格式化。
替代方法是在签入之前使用标准格式化程序执行相反的操作...在应有的位置添加空格。