Git兼容Windows和Linux换行规则设置

如果一个项目需要同时在Linux下和Windows下编辑(例如WSL或者SCP拷贝),换行符的差别会带来各种兼容性问题,例如脚本无法运行、Git比较所有文件皆不相同等。因此需要统一格式。

相关配置

  • eol: 设置工作目录中文件的换行符,有三个值lfcrlfnative(默认,同操作系统)
  • autocrlf:
    • true 表示检出是转换CRLF,提交时转换为LF
    • input 表示检出是不转换,提交时转换为LF
    • false 表示不做转换
  • safecrlf:
    • true 表示不允许提交时包含不同换行符
    • warn 则只在有不同换行符时警告
    • false 则允许提价时有不同换行符存在

情况一:兼容所在平台

要求Git在Windows上换行符使用crlf,在Linux上使用lf。提交时将crlf视作lf,检出时将lf转换为系统所需的。

运行

git config --system core.eol native
git config --system core.autocrlf true      # Windows
git config --system core.autocrlf input     # Linux

可以酌情考虑设置safecrlf

情况二:Windows平台兼容Linux格式

要求Git在Windows和Linux上都使用lf。提交时将crlf视作lf,检出时lf不转换。

运行

git config --local core.eol lf
git config --local core.autocrlf input

情况三:Linux平台兼容Windows格式

要求Git在Windows和Linux上都使用crlf。提交时将crlf视作lf,检出时将lf转换为crlf

运行

git config --local core.eol crlf
git config --local core.autocrlf true

(理论上要这么设,但是没有测试过)

其他说明

  1. 配置修改后不会立刻生效,一种简单方法是删掉所有被跟踪的文件然后用Git恢复,此时它们就会被检出为符合要求的格式了;
  2. 根据需要选择配置的--local--global--system

参考资料

  1. 8.1 自定义 Git - 配置 Git《格式化与多余的空白字符》一节;
    8.1 Customizing Git - Git Configuration《Formatting and Whitespace》一节;