LucKy_one

Always aiming higher


  • 首页

  • 关于

  • 标签

  • 分类

  • 归档

  • 搜索

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

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

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


参考文章:
7.1 自定义 Git - 配置 Git
Dealing with line endings

# Git
绑定自己的域名以及将DNS更换为DNSPOD
npm package.json中的dependencies和devDependencies的区别

Liu Tianhe

喜欢金融,喜欢科技
31 日志
29 标签
RSS
GitHub E-Mail
© 2014 – 2022 Liu Tianhe
由 Hexo 强力驱动 v3.9.0
|
主题 – NexT.Mist v7.3.0