Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在mercurial中进行合并时忽略空格_Mercurial_Merge_Whitespace - Fatal编程技术网

在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."

我们在Mercurial中进行合并时遇到了一个问题,在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
时,我得到了一个合并冲突。如果我们在每一条线上都有冲突,那么解决“真正的”冲突就变得困难和耗时。对于合并过程,我更倾向于认为“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”。不幸的是,它仍然与我给出的示例相冲突,因此仍然需要手动干预,即使一侧的更改只是空白。我想我会发布一个关于合并工具的新问题。我们有一个格式化程序在签入之前格式化文件。当我们在缩进和空格/制表符的使用上的约定发生变化时,问题就出现了。文件开始以新的约定提交,分支之间进行了合并,我们陷入了一片混乱。最终,我们在所有分支的所有文件上运行了格式化程序,但现在在尝试合并时出现了这个空白问题。有很多文件,所以我们希望尽可能地自动化合并。一旦合并完成,并且所有历史记录都包含了新的格式,那么一切都将恢复正常。