所以,我一直认为与core.autocrlf=true
Git 替换所有LF
结尾为CRLF
将文件检出到工作目录时。
来自Git book:
如果您使用的是 Windows 计算机,请将其设置为 true – 当您签出代码时,这会将 LF 结尾转换为 CRLF
但是,当签出具有混合行结尾的文件时core.autocrlf
set to true
,我的 Git 版本按原样检查文件。
我找到了一个非常方便的 GitHub 存储库来测试此行为 -https://github.com/YueLinHo/TestAutoCrlf
检测结果:
- A file with
LF
endings only (LF.txt)
- With
autocrlf=false
:按原样签出(所有行结尾都是LF
)
- With
autocrlf=true
:所有行结尾都更改为CRLF
结账时
到目前为止一切顺利,一切都如我所料。现在对于具有混合行结尾的文件:
- A file with mixed line endings (MIX-more_CRLF.txt, MIX-more_LF.txt)
- With
autocrlf=false
:按原样签出(混合LF
and CRLF
)
- With
autocrlf=true
:按原样签出(混合LF
and CRLF
)
为什么会出现这种情况?我还没有看到任何关于autocrlf=true
不接触具有混合行结尾的文件。
是我的 Git 设置有问题吗?我检查了core.autocrlf
设置运行git config --get core.autocrlf
签出后在存储库文件夹中autocrlf=true
在全局 .gitconfig 中,该命令返回 true。没有 .gitattributes 文件可以覆盖设置。
所有测试均在 Git 版本上进行1.9.5.msysgit.0
.
EDIT:最新 msysgit 版本上的行为相同1.9.5.msysgit.1
.
我最初的问题是,我以某种方式设法提交了一个混合行结束文件,仅LF
结局,同时有core.autocrlf
set to true
,意味着文件按原样签出,但提交时使用CRLF
变成LF
。我目前正在另一台机器上工作,无法在我的 msysgit 版本上重现此行为。
我正在重新发布一个被其所有者删除的答案,因为我认为它给出了最好的解释。我不知道作者为什么删除它,我认为这是正确的,我投票赞成取消删除。
显然,这种行为是在 Git 中硬编码的,并且不依赖于 core.safecrlf (并且我已经测试过这一点,即使我设置了混合文件也不会受到影响)git config core.safecrlf false
.
原答案如下:
奥托克夫doesn't转换混合行结尾,正如 git 的源代码所示:
https://github.com/git/git/commit/a0ad53c18100226cb1a138cb9b3bc3615170be8f
请注意这里的评论:
/* No "naked" LF? Nothing to convert, regardless. */
and
/* 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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)