Git忽略文件和操作系统尾部换行符问题

说起.gitignore,就想起了之前从Windows更换到Mac,pull代码下来修改完提交时,发现一个提示

说我正在提交一个CRLF文件到仓库上,问我要怎么处理,这个CRLF其实是不同操作系统的尾部换行符的格式,CRLF是Carriage Return Line Feed的缩写,中文意思是回车换行,LF是Line Feed的缩写,中文意思是换行

假如你正在Windows上写程序,又或者你正在和其他人合作,他们在Windows上编程,而你却在其他系统上,在这些情况下,就可能会遇到行尾结束符问题,这是因为Windows使用回车和换行两个字符来结束一行,而Mac和Linux只使用换行符一个字符。虽然这是小问题,但它会极大地扰乱跨平台协作,在提交时产生非常多的冲突

对于不同的平台,有不同的处理方案:

  1. Git可以在你提交时自动地把行结束符CRLF转换成LF,而在签出代码时把LF转换成CRLF。设置core.autocrlf来打开此项功能,如果是在Windows系统上,就把它设置成true,这样当签出代码时,LF会被转换成CRLF:

    $ git config --global core.autocrlf true

  2. Linux或Mac系统使用LF作为行结束符,因此你不想Git在签出文件时进行自动的转换;当一个以CRLF为行结束符的文件不小心被引入时你肯定想进行修正,把core.autocrlf设置成input来告诉Git在提交时把CRLF转换成LF,签出时不转换:

    $ git config --global core.autocrlf input

这样会在Windows系统上的签出文件中保留CRLF,会在Mac和Linux系统上,包括仓库中保留LF。

  1. 如果你是Windows程序员,且正在开发仅运行在Windows上的项目,可以设置false取消此功能,把回车符记录在库中:
    $ git config --global core.autocrlf false

上面三条总结起来就是下面的情形,x是你当前使用的系统所使用的换行方式

1) true:             x -> LF -> CRLF
2) input:            x -> LF -> LF
3) false:            x -> x -> x


项目已经存在换行符不同的问题的解决方案:

  • 如果当前开发有多个分支且各分支不同步,需要每个分支进行一次转换
  • 如果只有一个分支或多个分支处于同一节点。可以从master切换一个新分支,进行转换,然后commit ,将此分支合并到所有分支。
  • 将修改过的分支push到gitlab,让其他成员更新代码即可。
  • Ps:由于每个人系统不同或者就是git的问题,可能出现更新完代码换行符不变,这时以服务器上的代码为准重新clone一份最新代码即可

内容转自:  HoShI's Blog 的文章 《Git忽略文件和操作系统尾部换行符问题》

  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值