在mercurial中进行合并时忽略空格
我们在Mercurial中进行合并时遇到了一个问题,在Mercurial中,空格更改导致合并冲突,从而掩盖了我们可能遇到的任何“真实”冲突,使合并成为一场噩梦。我们最近采用了一种格式样式,这种样式改变了某些分支中文件的缩进,此后几乎不可能进行合并 例如,请尝试:在mercurial中进行合并时忽略空格,mercurial,merge,whitespace,Mercurial,Merge,Whitespace,我们在Mercurial中进行合并时遇到了一个问题,在Mercurial中,空格更改导致合并冲突,从而掩盖了我们可能遇到的任何“真实”冲突,使合并成为一场噩梦。我们最近采用了一种格式样式,这种样式改变了某些分支中文件的缩进,此后几乎不可能进行合并 例如,请尝试: hg init testrepo cd testrepo/ echo "This is text." > newfile.txt hg add newfile.txt hg commit -m "Created a file."
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
时,我得到了一个合并冲突。如果我们在每一条线上都有冲突,那么解决“真正的”冲突就变得困难和耗时。对于合并过程,我更倾向于认为“OK,变更集2行1只与空白区不同,所以考虑它不变。选择变更集1行1作为合并结果。” < P>这是一个清理空白区的情况吗?如果没有,我将编写一个简单的脚本,在签入之前清除所有空白,以避免出现这种情况。缺点是会丢失格式,但大多数IDE可以轻松地为您恢复格式
另一种方法是在签入之前使用标准格式化程序来执行相反的操作。。。在应该的位置添加空白。合并工具会选择是否忽略空白。您可以配置用于mercurial的各种合并工具,如下所示: Mercurial的内部预合并不会/不能忽略空白,但如果外部合并工具忽略空白,并且只发现空白更改,它将立即退出,如果发现其他空白更改,它可以在加载时隐藏空白更改 例如,使用流行的设置,您可以启用“空白2/3文件合并”设置,并告诉它是选择左还是右
Tl;Dr:在你的合并工具中打开这个,而不是在mercurial中。@SyntaxT3rr0r:谢谢你的提示-我不知道Go-lang,一直在感兴趣地阅读它。类似于Python/Java的混合。可能的重复:Thx,我设法将kdiff3设置为合并工具,并将“空白2/3文件合并”设置为“Pick B”。不幸的是,它仍然与我给出的示例相冲突,因此仍然需要手动干预,即使一侧的更改只是空白。我想我会发布一个关于合并工具的新问题。我们有一个格式化程序在签入之前格式化文件。当我们在缩进和空格/制表符的使用上的约定发生变化时,问题就出现了。文件开始以新的约定提交,分支之间进行了合并,我们陷入了一片混乱。最终,我们在所有分支的所有文件上运行了格式化程序,但现在在尝试合并时出现了这个空白问题。有很多文件,所以我们希望尽可能地自动化合并。一旦合并完成,并且所有历史记录都包含了新的格式,那么一切都将恢复正常。