【发布时间】:2015-06-29 20:40:37
【问题描述】:
所以,我一直认为core.autocrlf=true Git 在将文件检出到工作目录时会将所有LF 结尾替换为CRLF。
来自Git book:
如果您使用的是 Windows 机器,请将其设置为 true - 这会在您签出代码时将 LF 结尾转换为 CRLF
但是,当检出具有混合行结尾且 core.autocrlf 设置为 true 的文件时,我的 Git 版本会按原样检出文件。
我找到了一个非常方便的 GitHub 存储库来测试这种行为 - https://github.com/YueLinHo/TestAutoCrlf
测试结果:
- 只有
LF结尾的文件 (LF.txt)- 使用
autocrlf=false:按原样签出(所有行结尾都是LF) - 使用
autocrlf=true:结帐时所有行尾都更改为CRLF
- 使用
到目前为止一切顺利,一切都符合我的预期。现在对于具有混合行尾的文件:
- 具有混合行尾的文件(MIX-more_CRLF.txt、MIX-more_LF.txt)
- 使用
autocrlf=false:按原样签出(LF和CRLF的混合) -
autocrlf=true:按原样签出(LF和CRLF的混合)
- 使用
为什么会这样?我没有看到任何关于 autocrlf=true 不接触具有混合行结尾的文件的信息。
我的 Git 设置有问题吗?在使用全局 .gitconfig 中的 autocrlf=true 签出后,我检查了存储库文件夹中运行 git config --get core.autocrlf 的 core.autocrlf 设置,并且命令返回 true。没有 .gitattributes 文件可以覆盖设置。
所有测试均在 Git 版本 1.9.5.msysgit.0 上进行。
编辑:在最新的 msysgit 版本 1.9.5.msysgit.1 上的行为相同。
我最初的问题是,我以某种方式设法提交了一个只有LF 结尾的混合行结尾文件,同时将core.autocrlf 设置为true,这意味着文件按原样签出,但使用@ 提交987654348@ 更改为 LF。我目前正在另一台机器上工作,无法在我的 msysgit 版本上重现此行为。
【问题讨论】:
-
这实际上听起来像是一个不错的默认值;如果一个文件有混合的行尾,那么在一般情况下可能有一个很好的理由。显而易见的解决方案是将文件转换为系统默认的行尾,然后提交,允许 git 转换行尾。
-
@MicroVirus 也许这是一个很好的默认值,但我还没有在任何地方看到这种行为,所以我想知道为什么会这样。
标签: git newline msysgit line-endings core.autocrlf