问题描述
Linux下使用Git,不管怎么checkout或reset,有些文件总是有diff(标注被modified)。
问题原因
checkout文件时,git把windows的换行符(CRLF)转换成Linux的换行符(LF),由此产生diff。
解决办法
修改.git/config文件
[core]
autocrlf = input
safecrlf = warn
eol = lf
autocrlf:默认true
- true:会自动在commit/checkout时,将CRLF转换为LF。
- false:不做任何转换。
- input:仅在commit时有转换,checkout时不转换。
safecrlf:默认true
- true:不允许提交混合换行符的文件。
- false:允许提交混合换行符的文件。
- warn:显示warning,并允许提交。
eol:默认native。autocrlf为false时,才起作用。表示commit文件时,用什么换行符。
- native:操作系统的换行符。
- crlf:使用Windows CRLF。
- lf:使用Linux LF
P.S. 因为autocrlf不是false,“eol = lf”其实没起作用。这里只是以防autocrlf为true时,依然使用Linux LF作为换行符。
强制刷新所有文件
git rm –cached -r .
git reset –hard
设置正确莫名还是出现该问题
我设置autocrlf = input,但是还是出现这种diff。此时就git reset –hard [origin/master]一下把。
扩展:CRLF、CR、LF解释
原文地址:https://www.jianshu.com/p/b03ad01acd69
- CR:Carriage Return,对应ASCII中转义字符\r,表示回车
- LF:Linefeed,对应ASCII中转义字符\n,表示换行
- CRLF:Carriage Return & Linefeed,\r\n,表示回车并换行
Windows操作系统采用两个字符来进行换行,即CRLF;Unix/Linux/Mac OS X操作系统采用单个字符LF来进行换行;另外,MacIntosh操作系统(即早期的Mac操作系统)采用单个字符CR来进行换行。