windows下和linux下,git换行符变化,^M问题,git diff

 

From:http://www.xuebuyuan.com/1390948.html

Windows用CR LF来定义换行,Linux用LF。CR全称是Carriage Return ,或者表示为\r, 意思是回车。 LF全称是Line Feed,它才是真正意义上的换行表示符。为什么Windows添加一个CR和LF组合表示,我并不清楚。不过如果用git diff的时候看到^M字符,就说明两个文件在换行符上有所差别。

比如从我的Windows开发的同时那边拿来一个目录,就会发现几乎所有的文件都被修改过了。其实并不是这样,都是由于文件多了CR后造成的。

下面简单的方法可以让git diff的时候忽略换行符的差异:

git config --global core.whitespace cr-at-eol

更好的方法是每个项目都有一个.gitattributes文件,里面配好了换行符的设置,参考

https://help.github.com/articles/dealing-with-line-endings(me:此文才是真)

 

From:http://www.cnblogs.com/qkhh/p/5212960.html

开发团队都在 windows 下开发,有IDE管理代码。对我们来说,最好是禁用换行转换符的功能。我用 cygwin 提交代码,提交时总提示自动转换换符。其实都不用提交,仅运行 git status 看有没有提示就知道了。

也是在网上找了一圈,一些建议是运行下面的命令:

git config --global core.autocrlf false

git config --global core.saftcrlf true

如果不运行命令,直接编辑 ~/.gitconfig 增加下面的内容也是一样:

[core]

    autocrlf = false

    safecrlf = true

但并不能解决问题。后来继续找,一篇文章给了我提示。到项目目录下找到一个 .gitattributes 文件,将第一行的 

*text=auto !eof 

改成 *text=

就解决问题了。再运行 git status 不再提示转换。

以此乱文感谢在网上分享的人,现在中文有价值的分享还是少了点。 

 

From:http://blog.sina.com.cn/s/blog_64e1046201019yuh.html 

在不同平台上,换行符是不一样的。比如windows使用的是 crlf,mac或linux用的是lf。

如果开发平台是多样的,比如程序员A在windows上,程序员B在mac或者linux上,那么就需要统一使用换行符。因为不同平台上的GIT,在checkout、commit时,默认会自动转换换行符。所以,你可能会发现,有些时候你并没有修改某个文件,但是git提示你需要add、commit这个文件,就是因为git自动的替换了换行符。

为了避免这种情况,我们需要设置git不要去自动替换换行符。

1 打开某个repo的根目录,打开.gitattributes

2 找到 * text=auto行,如果想统一使用windows格式,修改为 * text=crlf    

 如果想统一使用linux格式,修改为 * text=lf

3 修改完毕后,提交对根目录下的.gitattributes文件的修改

题外话:

建议保持git的全局的换行符自动替换设定,只是针对每个repo做特定的设置。

 

 

+

+

+

=

+

+

+

 

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐