最近在使用Github时遇到个问题。
众所周知,在各操作系统下,文本文件所使用的换行符是不一样的。UNIX/Linux 使用的是 0x0A(LF),早期的 Mac OS 使用的是0x0D(CR),后来的 OS X 在更换内核后与 UNIX 保持一致了。但 DOS/Windows 一直使用 0x0D0A(CRLF)作为换行符。
Git提供了一个换行符自动转换功能试图解决这个问题–autocrlf,他包含了三种状态,true,input,false,详细内容可以看下面。Windows平台上的默认设置是true,这样在你签出代码的时候他会自动转换成你操作系统所使用CRLF,然后在提交的时候又自动转换成LF。
这个时候问题来了,autocrlf在Mac下默认设置成false,因为现在Mac也是用LF,按理说就没必要进行任何转换,但是如果你在windows操作系统上将版本库放在例如Dropbox这种云存储上,然后同步到Mac上,或者什么其他方式把windows文件引入到Mac下。那么在你提交的时候在Mac环境下不会自动将CRLF转换成LF,那么就会发现所有行都有改动。这个时候就需要设置成input。
Github上的建议配置,是在windows下将core.autocrlf设为true,在Mac和linux下设为input,这样就可以有效避免上述问题。
P.S.与换行符相关的命令
#AutoCRLF
#提交时转换为LF,检出时转换为CRLF
git config --global core.autocrlf true
#提交时转换为LF,检出时不转换
git config --global core.autocrlf input
#提交检出均不转换
git config --global core.autocrlf false
#SafeCRLF
#拒绝提交包含混合换行符的文件
git config --global core.safecrlf true
#允许提交包含混合换行符的文件
git config --global core.safecrlf false
#提交包含混合换行符的文件时给出警告
git config --global core.safecrlf warn
P.S.S. git config 有三个作用域system,globe,local。优先级是local>globe>system。剩下的以后在研究