让Git在其"<<<<<<< HEAD"合并行中使用CRLF

Jam*_*ies 11 git eol

是否有可能要求Git在需要合并时将其放入文件的行末尾使用CRLF而不是LF?

使用LF合并

如果在没有可见EOL字符的情况下解决文本编辑器中的冲突,如果按选择删除,很容易意外地将这些LF合并到最后:

按选择删除

离开你:

LF潜入文件!

现在有两个LF已经潜入你的CRLF文件了!

显然,一种替代方案是在解析合并时只需要更多关注行结尾,但我想我会问有什么方法可以告诉Git将CRLF用于它在这里生成的行.

Von*_*onC 10

是否有可能要求Git在需要合并时将其放入文件的行末尾使用CRLF而不是LF?

它......实际上是可能的,来自git 2.7.2 +(2016年2月).
而且你不需要做任何事情.

请参阅Johannes Schindelin()提交15980de,提交86efa21(2016年1月27日).(由Junio C Hamano合并- -提交ab2c107,2016年2月17日)dscho
gitster

merge-file:让冲突标记与上下文的行尾样式匹配

合并具有CR/LF行结尾的文件时,冲突标记应与那些匹配,以免输出文件具有混合行结尾.

这是一个特别的Windows上,兴趣在那里有些编辑得到 真正的混合行结尾混淆.

Beat Bolli的这个补丁的原始版本受到尊重core.eol,此开发商随后的改进也得到了尊重gitattributes.
然而,这种方法是次优的:git merge-file被发明为GNU合并的替代品,因此在任何存储库之外运行都没有问题!

与原有方法的另一个问题是指出了朱尼奥·哈默诺:旧仓库可能有他们的文本文件使用CR/LF行结束(和坚定的core.eolgitattributes将会给我们一个错觉那里).因此,更优越的方法是简单地匹配上下文的行结尾(如果有的话).

我们实际上根本不需要查看整个上下文:

  • 如果这些文件都LF-而已,或者,如果它们都具有CR/LF行尾,就足够了看只是一个单一的线相匹配的风格.
  • 如果线路末端无论如何都是混合的,那么模仿一条线路的eol 仍然是可以的:我们只会添加一堆混合线路的结尾,而我们无能为力.

所以我们要做的是:我们看一下冲突前的那一行,回到前面的一行,如果它是最后一行并且没有行结束,则回到第一行,首先是在第一张后图像中,然后是第二个后期图像,最后是前期图像.
如果我们找到一致的CR/LF(或未定义)行尾样式,我们匹配它,否则我们使用LF专用行结束冲突标记.

请注意,虽然确实必须至少有两行我们可以查看(否则不会发生冲突),对于行结尾也是如此:所讨论的三个文件都可以由一行组成而没有任何行结束,每个.在这种情况下,我们回归到仅使用LF.