okokyu 2016-03-29
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做特定的设置。
+
+
+
=
+
+
+