因此,我一直以为,在将文件检入工作目录时,使用core.autocrlf=true
Git替换所有LF
结尾CRLF
。
从Git书中:
如果您使用的是Windows计算机,请将其设置为true –在签出代码时,这会将LF结尾转换为CRLF
但是,当检出带有混合行尾且core.autocrlf
设置为的文件时true
,我的Git版本会按原样检出该文件。
我找到了一个非常方便的GitHub存储库来测试此行为-https: //github.com/YueLinHo/TestAutoCrlf
检测结果:
LF
仅带有结尾的文件(LF.txt)
autocrlf=false
:按原样签出(所有行尾均为LF
)autocrlf=true
:CRLF
结帐时所有行尾均更改为到目前为止一切顺利,一切都如我所料。现在对于带有混合行尾的文件:
autocrlf=false
:签出原样(的混合LF
和CRLF
)autocrlf=true
:签出原样(的混合LF
和CRLF
)为什么会这样?我还没有看到autocrlf=true
不触摸带有混合行尾的文件的任何信息。
我的Git设置有问题吗?我在全局.gitconfig中签出后检查了在存储库文件夹中core.autocrlf
运行的设置,该命令返回true。没有.gitattributes文件可以覆盖设置。git config --get core.autocrlf
autocrlf=true
所有测试均在Git版本上进行1.9.5.msysgit.0
。
编辑:在最新的msysgit版本上具有相同的行为1.9.5.msysgit.1
。
我最初的问题是,我设法以某种方式提交了一个混合行结尾文件,LF
而该文件在core.autocrlf
设置为时仅包含结尾true
,这意味着该文件按原样签出,但CRLF
更改为提交LF
。我当前正在另一台计算机上工作,无法在我的msysgit版本上重现此行为。
我要重新发布由所有者删除的答案,因为我认为它给出了最好的解释。我不知道为什么作者删除了它,我认为它是正确的,我已投票决定删除。
显然,此行为在Git中是硬编码的,并且不依赖于core.safecrlf(而且我已经对此进行了测试,即使我设置了,混合文件也不会受到影响git config core.safecrlf false
。
原始答案如下:
Autocrlf不会转换混合的行尾,正如git的源代码所示:
https://github.com/git/git/commit/a0ad53c18100226cb1a138cb9b3bc3615170be8f
注意此处的注释:
/* No "naked" LF? Nothing to convert, regardless. */
和
/* If we have any CR or CRLF line endings, we do not touch it */ /* This is the new safer autocrlf-handling */
混合行结尾转换是不可逆的,完成后,Git崩溃了。
因此,如果您想自动转换文件的行尾,最好设置一个.gitattributes文件来处理行尾。如:
LF.txt eol=lf
CRLF.txt eol=crlf
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句