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 | git config --global 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 |