【git warning】: LF will be replaced by CRLF

【问题】:在使用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

原文地址:https://www.cnblogs.com/uakora/p/12496818.html