Git 换行符设置终极指南

需求

  1. 减少冲突,尤其跨平台协作时。
  2. 现代化
  3. 提高性能

思考

  1. “达成一致”是冲突最少的,然而在跨平台协作时,正是因为过去的 OS 非要搞出 CR、CRLF、LF 三种换行符,才会有“不一致导致的冲突”。macOS 已经早早妥协,由 CR 改为 LF。2026 年的 Windows 也基本投降了。所以目前来说,“达成一致”是比较容易的。

  2. 2026 年的 Windows 10/11 依然是最好的 Linux 发行版,是现代化的 OS,“几乎”完美兼容 LF。稣常用的软件也都支持 LF,所以稣个人单方面宣布:世界上只有 LF 这一种换行符。

  3. 为了提高性能,autocrlf 必须关掉,因为——世界上只有 LF 这一种换行符!

推论

  1. 由于“世界上只有 LF 这一种换行符”,稣在 Windows 上使用 WSL 时,都能保证文本文件的换行符是统一的,不会出现“在原生 Windows 下 clone 的 bash 脚本是 CRLF 换行符,到 WSL 运行它,却发现换行符不对”这样的问题。如果您也常在原生环境和 WSL 下使用同一个仓库,那么把 core.autocrlf 设为 input 就不是个好的方案。

  2. LF 比 CRLF 节约硬盘,在 SSD 这么贵的 2026 年,这样的设置对穷稣来说简直是救命。

  3. 稣在 Windows 上 clone 的仓库,可以直接复制到 Debian下用,反之亦然。这可太重要了,因为稣经常在 Windows 上 clone 仓库,然后 Debian 那边如果也要用,就不想再从外网慢慢 clone 一遍了,直接内网复制过去更快。

具体操作

在 Windows 安装 Git 时,CRLFOption 这步有三个选项:

  • CRLFAlways
  • LFOnly
  • CRLFCommitAsIs

对应如图:

CRLFOption

请选择第三个,即 CRLFCommitAsIs。

如果已经安装好了,不记得之前选哪个,则可以显式设置一下,在 Windows Terminal 管理员模式下:

1
2
git config --system core.autocrlf false
git config --system core.safecrlf true

以上针对本机生效,如果您机器上有多个用户,建议这样做。如果没有管理员权限,那就只能针对当前用户设置了,相应的命令为:

1
2
git config --global core.autocrlf false
git config --global core.safecrlf true

core.safecrlf 的默认值就是 true,这里也显式设置,是建议您不要关掉它。

例外

Windows 上还是有些软件对某些文本文件只支持 CRLF 的,所以需要使用 .gitattributes 来排除它们,比如说:

1
2
3
4
5
6
7
8
9
10
* text=auto eol=lf

*.rc text eol=crlf
*.inf text eol=crlf
*.sln text eol=crlf
*.slnx text eol=crlf
*.vcxproj text eol=crlf
*.vcxproj.filters text eol=crlf
resource.h text eol=crlf
packages.config text eol=crlf

注意第一行,它是设置默认换行符为 LF,这符合“世界唯一”的设定,要牢记。

如果您使用微信,也可以关注公众号 UMU618,在公众号文章里评论。