Git与CRLF笔记

CRLF 与 LF 简述

  • CR → Carriage Return,对应ASCII中转义字符 \r,十六进制为 0D,表示回车
  • LF → Linefeed,对应ASCII中转义字符 \n,十六进制为 0A 表示换行
  • CRLF → Carriage Return & Linefeed,\r\n,十六进制为 0D0A,表示回车并换行

实际上,这与不同的操作系统有关,Windows 平台下使用 CRLF 表示换行;Unix/Linux/Mac OS X 平台下使用单字符 LF 表示换行;而 MacIntosh (即早期 Mac 操作系统) 采用 CR 表示换行。

需要注意到的是,在 Windows 平台下,如果在命令行环境下打印 \r 字符,会将光标前移到第一位。

Git 与 CRLF

我们知道 Git 是版本管理工具,而跨平台开发也是经常性的事情。这个时候注意到,如果 Linux 下的代码文件,被 Git 拉取到 Windows 平台下时,很可能出现 Windows 平台下出现读取错误、编译错误等问题。

所以 Git 提供了一个名为 core.autocrlf 的配置,可以将换行结尾自动化转换。

1
2
git config --global core.autocrlf  [true | input | false]
git config --local core.autocrlf [true | input | false]
  • true → 提交新版本时,将所有换行结尾转换为 CRLF;回退版本时,将所有换行结尾转换为 CRLF。
  • input → 提交新版本时,将所有换行结尾转换为 CRLF;回退版本时,不转换。
  • false → 提交新版本和回退版本时,都不转换。

但此项设置只针对 CRLF 和 LF 单一存在的文本文件。

如果想要检查出 CRLF 和 LF 混合存在的文本文件,需要使用 core.safecrlf 配置:

1
git config --global core.safecrlf [true | false | warn]
  • true → 禁止提交混合换行符的文本文件。
  • false → 不禁止提交混合换行符的文本文件。
  • warn → 提交混合换行符的文本文件时发出警告。

一般来说在进行跨平台开发时,建议使用以下指令,防止发生换行符异常问题。

1
git config --local core.autocrlf true