Git自动转换换行符(autocrlf)带来的问题

最近在使用Github时遇到个问题。
众所周知,在各操做系统下,文本文件所使用的换行符是不同的。UNIX/Linux 使用的是 0x0A(LF),早期的 Mac OS 使用的是0x0D(CR),后来的 OS X 在更换内核后与 UNIX 保持一致了。但 DOS/Windows 一直使用 0x0D0A(CRLF)做为换行符。linux

Git提供了一个换行符自动转换功能试图解决这个问题—autocrlf,他包含了三种状态,true,input,false,详细内容能够看下面。Windows平台上的默认设置是true,这样在你签出代码的时候他会自动转换成你操做系统所使用CRLF,而后在提交的时候又自动转换成LF。git

这个时候问题来了,autocrlf在Mac下默认设置成false,由于如今Mac也是用LF,按理说就不必进行任何转换,可是若是你在windows操做系统上将版本库放在例如Dropbox这种云存储上,而后同步到Mac上,或者什么其余方式把windows文件引入到Mac下。那么在你提交的时候在Mac环境下不会自动将CRLF转换成LF,那么就会发现全部行都有改动。这个时候就须要设置成input。windows

Github上的建议配置,是在windows下将core.autocrlf设为true,在Mac和linux下设为input,这样就能够有效避免上述问题。操作系统

P.S.与换行符相关的命令code

#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。剩下的之后在研究作用域

相关文章
相关标签/搜索