消除Git diff中^M的差异

在Windows上把一个刚commit的文件夹上传到了Ubuntu。在Ubuntu上使用git status查看,发现很多文件都被红色标注,表示刚刚修改未add。在Windows上明明是working tree clean,同一个文件夹用FTP传到了Ubuntu,怎么会修改文件内容呢?

于是,用git diff查看文件差异,每一行结尾都有^M标注。百度了一下,了解了原因:

这是由于换行符在不同的操作系统上定义的区别造成的。

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

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

GitHub的帮助网站上给出了一种**解决方案**:

在Windows的文件夹上新建一个.gitattributes文件

文件内容如下:

# Set the default behavior, in case people don't have core.autocrlf set. * text=auto # Explicitly declare text files you want to always be normalized and converted # to native line endings on checkout. *.c text *.h text # Declare files that will always have CRLF line endings on checkout. *.sln text eol=crlf *.css text eol=crlf *.js text eol=crlf *.md text eol=crlf *.txt text eol=crlf *.sql text eol=crlf *.php text eol=crlf # Denote all files that are truly binary and should not be modified. *.png binary *.jpg binary

本文永久更新链接地址

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/14872.html