LF & CRLF

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
  1. 提交时转换为 LF,检出时转换为 CRLF
1
git config --global core.autocrlf true
  1. 提交时转换为 LF,检出时不转换 (因此建议在 window 操作系统下,不要使用这个设置)
1
git config --global core.autocrlf input
  1. 提交检出均不转换
1
git config --global core.autocrlf false
  • SafeCRLF
  1. 拒绝提交包含混合换行符的文件
1
git config --global core.safecrlf true
  1. 允许提交包含混合换行符的文件
1
git config --global core.safecrlf false
  1. 提交包含混合换行符的文件时给出警告
1
git config --global core.safecrlf warn

4. 图示

1
2
3
4
5
6
core.autocrlf=true:      core.autocrlf=input:     core.autocrlf=false:
repo repo repo
^ V ^ V ^ V
/ \ / \ / \
crlf->lf lf->crlf crlf->lf \ / \
/ \ / \ / \

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” 取默认值,无需单独设置