欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

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

最编程 2024-06-19 11:10:22
...
开源中国社区团队直播首秀,以分享为名讲述开源中国社区背后的故事”

最近在使用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。剩下的以后在研究

推荐阅读