Git 的 core.autocrlf 参数默认为true,即每次 checkin 时,Git 会将纯文字类型的档案中的所有 CRLF 字元转换为 LF,也就是版本库中的换行符号一律存成 LF;在 checkout 时,则会将 LF 转换成目前作业系统的换行符号,例如在 Windows 上面就是转成 CRLF。
事实上现在很多windows下的编辑器都很聪明了,即使是 LF,也可以正常显示,无需做此转换。
对特定 repository 设定不做转换:
用文字编辑器修改 repository 根目录下的 .gitattributes 档案,修改 text 属性。例如:
* text=auto
这是预设值,即如果没有另外指定哪些档案类型要採用何种换行策略,就会使用此预设值:auto。也就是说,预设让 git 自动处理换行字元的转换。这个属性的其他设定值以及范例可以看这裡:Dealing with line endings。
在经历一次惨痛的教训之后,我的建议是把 auto 关掉(不要自动转换)。也就是把上面那行改成这样:
* -text
注意:.gitattributes 档案必须 commit 至档案库中;其设定会盖掉 core.autocrlf 参数的设定。
临时修改某一份文件的换行符:
sed -i "s/\r//" [file-name]