Git LF和CRLF问题解决记录

度娘的答案让我们设置:git config –global core.autocrlf false;
(我当时看到这个答案的时候呢!也没有多想,直接就是一顿命令敲下去,然后发现我的问题并没有解决……继续纠结。。。)
好了,纠结了一晚上没有搞定,反而把我的git配置文件搞的乱七八糟的!接着第二天继续来……这次学聪明了。我们先来看看问题,然后寻找是什么原因造成的。
我的问题呢!就是我每次在windows下面修改了代码然后push给git然后linux下面pull,但是我在linux下面没有修改过代码。下次我同样在windows下面修改代码然后push然后同样在linux下面pull就会出现那个CRLF的警告然后出现致命错误不能pull代码需要先push本地修改的代码。这就尴尬了,我都没改代码居然提示有修改的文件需要先提交。。。然后度娘问为什么出现这个问题(有事多度娘这句话是没错的。)然后就找到了问题同时给出了上面的解决方案。其实不能说这个方案是错误的,只能说那个方案对于我并没有理解透彻。
出现这个问题的原因就是Linux系统和windows系统下的换行符不一样Linux是’\n’既LF,windows下面确实’\r\n’既CRLF。这本来很正常嘛但是坑的就是git的默认设置是push的时候会把CRLF转换成LF而pull的时候会把LF转换成CRLF。这就尴尬了!!!所以每次我pull。git就会告诉你你已经有文件被修改了。(除非没有换行符)
哦了!问题出现了,原因找到了。接下来就是解决问题了。这个需要慢慢来,不能着急。。。先来根烟!好了继续我们的爬坑之路。
现在我们首先来了解下git core.autocrlf 的各项配置的意义:
git config –global core.autocrlf true//设置git在push转换成lf,pull的时候转换成crlf(其实默认配置就是这个样子的)
git config –global core.autocrlf false//设置git在push和pull的时候不会进行转换(这个呢!不会报那个CRLF的错误但是你会发现可能会出现错误,我就是laravel的routes.php配置的路由跑不了了!!!)
git config –global core.autocrlf input//设置git在push的时候将lf转换成crlf,pull的时候并不会把crlf转换成crlf。(这个对我有帮助)
好了,原理我们也清楚了。最后说说我的解决方案!其实很简单:
windows 下面采用默认的配置。
linux 下面执行命令git config –global core.autocrlf input
这样我们在windows下面pull的时候会将lf转换成crlf在push的时候会将crlf转换成lf在linuxpull的时候我们不会转换但是提交的时候会将crlf转换成lf。(其实想想在linux下面设置成git config –global core.autocrlf false应该也是可以的哦!)

(这里是因为我的前面一顿命令敲下去把自己git的配置文件全部给整乱了!所以说说我的整理过程)
使用git config –list(注:不要进入你的项目目录,因为项目目录也会有git配置的),出现git配置项列表:
Git LF和CRLF问题解决记录_第1张图片
我们看到有两个core.autocrlf=true,这种情况下呢你可以选择不去修改配置文件,出现这种情况其实就是你自己在后面修改了core.autocrlf的问题。我的情况就是我的配置文件中有两个相同的配置项,而且两个配置项的值还不是一样的,所以你不管怎么改都只能改变一个。从而导致我修改的配置好像没有效果。如果你也是这种情况你可以进入git bash界面:
Git LF和CRLF问题解决记录_第2张图片
然后vi ~/.gitconfig
Git LF和CRLF问题解决记录_第3张图片
删除一个autocrlf选项就可以了。
好了!!!终于可以睡觉了!!!所以今天早上就把这个记录下。。。然后继续我们的爬坑之旅。。。

你可能感兴趣的:(git)