Git对换行符LF与CRLF的处理详解

由于想把windows平台上写的Python代码部署到Linux上运行,所以将代码的换行符更改为LF模式,结果在git add的时候看到如下提示警告:

1
2
Warning: LF will be replaced by CRLF in Python/automation.py.
The file will have its original line endings in your working directory

本文固定地址:http://blog.jiangjiaolong.com/git-crlf-lf.html

在网上查阅了几篇文章,最后才搞懂,原来聪明的Git会自动对push的代码做换行符转换处理,对换行符转换的配置可以使用如下配置:

1
git config core.autocrlf true

以上的配置会对当前代码仓库生效,如果想设置全局参数,可以在config后面加上--global选项。

core.autocrlf设置选项有:

参数 详解
true Windows平台下默认选项,如果设置为该项,push代码的时候,会将push到代码仓库的代码切换为LF模式,当从远处仓库pull代码的时候,会将保存到本地的代码设置为CRLF模式。
input 如果设置为该项,push代码的时侯,会将push到代码仓库的代码切换为LF模式,当从远程代码仓库pull代码的时候,不会转换代码的换行符。
false Linux下默认为该选项,即无论push还是pull代码,都不对代码的换行符进行转换。

建议

根据实际验证发现,Windows系统下的autocrlf默认状态是true,Linux系统下的默认状态是false,MacOS下未测试,但是我想应该更Linux状态下一样,是false!因此,通常情况下,你并不需要修改你的autocrlf选项,window代码保存为CRLF即可!如果你代码是在windows平台下编辑,在Linux上运行或编译,因为换行符导致异常,那么建议将windows主机的Git autocrlf设置为ture,Linux主机的Git autocrlf选项设置为input!

需要注意的是:

对于代码仓库已经存在的CRLF换行代码,即使将autocrlf设置为true或input后,在本地将修改后再push到代码仓库的代码并不会改变代码仓库代码的换行符为LF!
比如:
在autocrlf设置为false,且你的编辑器设置为CRLF模式的情况下,将文件名为test.py推送到你的代码仓库,之后再将你的autocrlf设置为true或者input,当再次更新test.py文件并push到的代码仓库时,并不会更改test.py的换行符为LF。

参考资料:

本文历史:

  • 2018年3月23日 20:55 首次发表