【问题】:在使用Git提交代码时,出现“warning:LF will be replaced by CRLF”警告
问题出在不同操作系统所使用的换行符是不一样的,下面罗列一下三大主流操作系统的换行符:
- Uinx/Linux采用换行符LF表示下一行(LF:LineFeed,中文意思是换行);
- Dos和Windows采用回车+换行CRLF表示下一行(CRLF:CarriageReturn LineFeed,中文意思是回车换行);
- Mac OS采用回车CR表示下一行(CR:CarriageReturn,中文意思是回车)。
在Git中,可以通过以下命令来显示当前Git中采取哪种对待换行符的方式
$ git config core.autocrlf
此命令会有三个输出,“true”,“false”或者“input”
- 为true时,Git会将要提交的文件视为文本文件,将行尾(line endings)的CRLF转换为LF,而检出时会再将文件的LF格式转为CRLF格式
- 为false时,行尾不做任何改变,文件换行符保持其原来的格式
- 为input时,Git会将要提交文件行尾的CRLF转换为LF,而检出时不做处理
工作原理:
core.autocrlf=true: core.autocrlf=input: core.autocrlf=false: repo repo repo ^ v ^ v ^ v / \ / \ / \ crlf->lf lf->crlf crlf->lf \ / \ / \ / \ / \
或
autocrlf=true: X -> LF -> CTLF autocrlf=input: X -> LF -> LF autocrlf=false: X -> X -> X
说明:
X代表换行符CRLF(windows-style)或LF(unix-style)
第一个箭头表示本地提交到远程仓库,第二个箭头表示从远程仓库检出到本地
(注:上述三种选项不会影响CR格式的换行符)
警告出现的场景(under Windows):
— autocrlf = true ,使用unix-style LF换行符的文件
— autocrlf = input ,使用win-style CRLF换行符的文件
— autocrlf = false ,NEVER!
警告代表的意思:
“LF will be replaced by CRLF”:autocrlf=true,进行“commit-checkout”操作后,相应警告文件中 LF 换行符将被 CRTL 替换
“CRLF will be replaced by LF”:autocrlf=input,进行“commit-checkout”操作后,相应警告文件中 CTLF 换行符将被 LF 替换
修改autocrlf:
$ git config --global core.autocrlf true $ git config --global core.autocrlf false $ git config --global core.autocrlf input
说明:
将core.autocrlf设为false即可去除该警告。如果你和你的伙伴只工作于Windows平台或者Linux平台,那么没问题,不过如果是存在跨平台的现象的话,还是需要根据实际情况设置。
将core autocrlf设为true时,还有一个需要慎重的地方,当你上传一个二进制文件,Git可能会将二进制文件误以为是文本文件,从而也会修改你的二进制文件,从而产生隐患。
相关联配置项SafeCRKF:
- 拒绝提交包含混合换行符的文件
git config --global core.safecrlf true
- 允许提交包含混合换行符的文件
git config --global core.safecrlf false
- 提交包含混合换行符的文件时给出警告
git config --global core.safecrlf warn
-----------------------------------------------
参考文档:
https://stackoverflow.com/questions/1967370/git-replacing-lf-with-crlf
https://blog.csdn.net/h330531987/article/details/90761143