1. 什么是 CRLF 和 LF
- CR, ASCII 13, \r 回车
- LF, ASCII 10, \n 换行
- CRLF 是 Carriage-Return / Line-Feed 的缩写,意思是回车/换行
- LF 指代换行
2. 使用场景
- CRLF -> Windows-Style 表示句尾使用回车换行两个字符(”\r\n”)
- LF -> Unix-Style 表示句尾只使用换行(”\n”)
- CR -> Mac-Style 表示句尾只使用回车(”\r”)
- 正确使用可避免 CRLF 注入攻击
3. Git 设置
- AutoCRLF
- 提交时转换为 LF,检出时转换为 CRLF
1 | git config --global core.autocrlf true |
- 提交时转换为 LF,检出时不转换 (因此建议在 window 操作系统下,不要使用这个设置)
1 | git config --global core.autocrlf input |
- 提交检出均不转换
1 | git config --global core.autocrlf false |
- SafeCRLF
- 拒绝提交包含混合换行符的文件
1 | git config --global core.safecrlf true |
- 允许提交包含混合换行符的文件
1 | git config --global core.safecrlf false |
- 提交包含混合换行符的文件时给出警告
1 | git config --global core.safecrlf warn |
4. 图示
1 | core.autocrlf=true: core.autocrlf=input: core.autocrlf=false: |
5. 编辑器设置
- vs code 中,可设置 “files.eol”: “\r\n” 来修改
6. 最终解决方案
- .editorconfig 文件中,设置 end_of_line = crlf
- git config –global core.autocrlf true 取默认值,无需单独设置
- 编辑器设置 User Settings 中 “files.eol”: “\r\n” 取默认值,无需单独设置