消除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
  • 其中,帮助网站上有详细介绍了text关键字。eol=crlf表示使用CRLF换行。

  • 根据Ubuntu上哪些类型的文件被标红, 便在.gitattributes上将text属性设置为eol=crlf

  • 保存文件。

  • 查看一下状态:git status,发现.gitattributes修改未暂存

  • 暂存:git add .gitattributes

  • 提交:git commit -m "Add a .gitattributes file"

  • 接下来上传到Ubuntu上,.gitattributes就发挥了作用。使用git status查看,整个工作区都清静了。

消除Git diff中^M的差异的更多相关文章

  1. git diff 比较差异

    说明 以下命令可以不指定 <filename>,表示对全部文件操作. 命令涉及和 Git本地仓库对比的,均可指定 commit 的版本. HEAD 最近一次 commit HEAD^ 上次 ...

  2. git diff ^M的消除

    这是由于换行符在不同的操作系统上定义的区别造成的. Windows用CR LF来定义换行,Linux用LF. CR全称是Carriage Return ,或者表示为\r, 意思是回车. LF全称是Li ...

  3. emacs 中使用git diff命令行

    在shell中执行git diff命令,常常会看到例如以下警告信息: terminal is not fully functional 事实上非常easy,配置一下就可以. git config -- ...

  4. git diff获取差异文件中文乱码的解决办法

    通过git的diff命令对两个commit id的版本进行差异化的对比.中文文件时出现乱码. git diff 6bded8d0c1fe1746c122121217dc0c88667091089 a9 ...

  5. git diff 差异对比

    转载原文: http://fsjoy.blog.51cto.com/318484/245465/ 1. 查看当前所有的更改情况.git status 结果有3部分,changes to be comm ...

  6. git diff比较版本差异(生成补丁)

    1.git diff [<options>] <commit> <commit> options 使用--name-only(git diff HEAD cd504 ...

  7. git工作中的常用操作

    上班开始,打开电脑,git pull:拉取git上最新的代码: 编辑代码,准备提交时,git stash:将自己编辑的代码暂存起来,防止git pull时与库中的代码起冲突,否则自己的代码就白敲了: ...

  8. git diff的用法

    在git提交环节,存在三大部分:working tree(工作区), index file(暂存区:stage), commit(分支:master) working tree:就是你所工作在的目录, ...

  9. Git diff 常见用法

      Git diff 用于比较两次修改的差异 1.1 比较工作区与暂存区 git diff  比较的是单个仓库的工作区与暂存区的差别,repo diff是对git diff的封装,用来分别显示各个项目 ...

随机推荐

  1. POJ 2135 Farm Tour(最小费用最大流)

    Description When FJ's friends visit him on the farm, he likes to show them around. His farm comprise ...

  2. 学习bash——管道命令

    摘要:管道命令概述.常见管道命令的使用(cut/grep.sort/wc/uniq.tee.tr/col/join/paste/expand.xargs.减号-) 一.概述 命令执行完会在屏幕上打印相 ...

  3. Unity UGUI 图片 轴对称效果 减少资源

    制作UI的过程中,为了节省资源,对称的图一般美术切一半给我们 手动拼图 有时会出现拼接处出现裂缝或重叠 调整大小时也不方便 得一块一块调整 所以就用BaseMeshEffect 的ModifyMesh ...

  4. mysql初识(5)

    将mysql数据库内的表导出为execel格式文件: 方法1:mysql命令:select * into outfile '/tmp/test.xls' from table_name;(需要注意的是 ...

  5. 基于phonegap,html5,ratchet,handlebars等技术的微表情APP

    该app是由很多有意思的微表情构成的,支持40种表情,并且每种表情都有不同的状态,主要有搜索表情,分享表情,摇一摇换表情等功能.目前只支持安卓版.由前期构思,到技术选型,到界面设计,到编码测试,再到发 ...

  6. 《学习OpenCV》课后习题解答8

    题目:(P126) 本章完整讲述了基本的输入/输出编程以及OpenCV的数据结构.下面的练习是基于前面的知识做一些应用,为后面大程序的实现提供帮助. a.创建一个程序实现以下功能:(1)从视频文件中读 ...

  7. Linux挂载Win共享文件夹 一

    1, Win下选中文件夹,属性设置为共享,红圈中的为共享路径,挂载时//ip/共享路径 2, 3,Linux需要安装这两个软件 rpm -qa | grep samba-client rpm -qa ...

  8. arcgis的炸开多边形功能

    有时候我们使用dissolve工具,或其他操作会将空间不相连的多边形对应的属性合并到一起,如图: 在高级编辑工具中: 有这样一个工具,但是它能满足我的要求,但是他不是批量的,不过它使用起来比较方便. ...

  9. C&C++——C函数与C++函数相互调用问题

    C C++相互调用 在项目中融合C和C++有时是不可避免的,在调用对方的功能函数的时候,或许会出现这样那样的问题,但只要我的C代码和我的C++代码分别都能成功编译,那其他就不是问题.近来在主程序是C语 ...

  10. strings用法小记

    By francis_hao    Feb 14,2017 打印文件中可打印字符,每个序列至少四(可配置)个字符长.主要用于显示非文本文件 概述   选项解释 -a --all - 扫描整个文件,不管 ...