关于Git的CRLF和LF换行符问题

首先来理清三大操作系统换行符的差异:

  • Linux、Mac:LF换行,转义序列\n;
  • Windows:CRLF回车和换行,转义序列\r\n;

VSCode中可以显示设置换行符,设置中搜索:files:eol:

VSCode换行符设置

跨平台开发中,使用Git提交代码会遇到换行符的问题,解决方案如下。

理想的环境是:Windows平台下,在拉取代码时转换为CRLF,提交代码时转换为LF;Linux和Mac平台拉取代码时转换为LF,提交代码时不需要转换。这样就能保证仓库中始终保持LF换行。

使用core.autocrlf配置Git行尾

git config --global core.autocrlf [true|false|input]
  • true:拉取代码时转换CRLF,提交代码时转换为LF;
  • input:拉取代码时不转换,提交代码时转换为LF;
  • false:关闭转换。

因此,Windows平台通常设置为true:

git config --global core.autocrlf true

Linux和Mac平台设置为input:

git config --global core.autocrlf input

Windows平台设置后,在提交代码时会出现警告:

warning: LF will be replaced by CRLF

网上流传关闭这个警告的方法就是将core.autocrlf设为false,但不推荐这样做。可以设置core.safecrlf为false来关闭警告。

使用core.safecrlf检测行尾

git config --global core.safecrlf [false|warn|true]
  • false:不做任何检查;
  • warn:在提交时检查并警告;
  • true:在提交时检查,如果发现混用换行符则拒绝提交。

core.safecrlf的设置不影响core.autocrlf设置的自动转换。因此,如果已经设置了自动转换,则可以将core.safecrlf设置为false来关闭警告。

阿里云