消除Git diff中^M的差异
消除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的差异的更多相关文章
- git diff 比较差异
说明 以下命令可以不指定 <filename>,表示对全部文件操作. 命令涉及和 Git本地仓库对比的,均可指定 commit 的版本. HEAD 最近一次 commit HEAD^ 上次 ...
- git diff ^M的消除
这是由于换行符在不同的操作系统上定义的区别造成的. Windows用CR LF来定义换行,Linux用LF. CR全称是Carriage Return ,或者表示为\r, 意思是回车. LF全称是Li ...
- emacs 中使用git diff命令行
在shell中执行git diff命令,常常会看到例如以下警告信息: terminal is not fully functional 事实上非常easy,配置一下就可以. git config -- ...
- git diff获取差异文件中文乱码的解决办法
通过git的diff命令对两个commit id的版本进行差异化的对比.中文文件时出现乱码. git diff 6bded8d0c1fe1746c122121217dc0c88667091089 a9 ...
- git diff 差异对比
转载原文: http://fsjoy.blog.51cto.com/318484/245465/ 1. 查看当前所有的更改情况.git status 结果有3部分,changes to be comm ...
- git diff比较版本差异(生成补丁)
1.git diff [<options>] <commit> <commit> options 使用--name-only(git diff HEAD cd504 ...
- git工作中的常用操作
上班开始,打开电脑,git pull:拉取git上最新的代码: 编辑代码,准备提交时,git stash:将自己编辑的代码暂存起来,防止git pull时与库中的代码起冲突,否则自己的代码就白敲了: ...
- git diff的用法
在git提交环节,存在三大部分:working tree(工作区), index file(暂存区:stage), commit(分支:master) working tree:就是你所工作在的目录, ...
- Git diff 常见用法
Git diff 用于比较两次修改的差异 1.1 比较工作区与暂存区 git diff 比较的是单个仓库的工作区与暂存区的差别,repo diff是对git diff的封装,用来分别显示各个项目 ...
随机推荐
- MVC项目用Windsor注入
第一步创建controler 注入类 public class ApiControllersInstaller : IWindsorInstaller { public void Install(I ...
- NO9——线段相关
#include <stdio.h> #include <iostream> #include <math.h> #include <algorithm> ...
- mysql 查询表的字段数目
select column_name from information_schema.`COLUMNS` where TABLE_NAME ='tcm_head'
- 软工实践 - 第二十三次作业 Beta 冲刺(1/7)
队名:起床一起肝活队 组长博客:https://www.cnblogs.com/dawnduck/p/10093337.html 作业博客:班级博客本次作业的链接 组员情况 组员1(队长):白晨曦 过 ...
- 深度优先搜索(DFS),逃离迷宫
[原创] 今天来说说深度优先搜索,深度优先是图论中的内容,大意是从某一点出发,沿着一个方向搜索下去,并伴随着有回退的特点,通常用来判断某一解是否存在,不用来寻找最优解:这里来看一个非常有意思的题目: ...
- 【EasyNetQ】- 发送接收
发布/订阅和请求/响应模式是位置透明的,因为您不需要指定消息的使用者所在的位置,而发送/接收模式专门用于通过命名队列进行通信.它也不会假设可以通过队列发送的消息类型.这意味着您可以通过同一队列发送不同 ...
- 多个jar包的合并
1.将所有jar文件复制至某临时目录中,通过jar命令解压得到所有的.class文件 > jar -xvf xx.jar xx.jar必须为具体的jar,不能为*.jar,会报FileNotFo ...
- [NOIP2017 TG D2T2]宝藏
题目大意:给定一个有重边,边有权值的无向图.从某一个点出发,求到达所有的点需要的最少费用,并且限制两点之间只有一条路径.费用的计算公式为:所有边的费用之和.而边$x->y$的费用就为:$y$到初 ...
- 【HDU 4300 Clairewd’s message】
Clairewd is a member of FBI. After several years concealing in BUPT, she intercepted some important ...
- 前缀统计 [Trie]
前缀统计 描述 给定N个字符串S1,S2...SN,接下来进行M次询问,每次询问给定一个字符串T,求S1-SN中有多少个字符串是T的前缀.输入字符串的总长度不超过10^6,仅包含小写字母. 输入格式 ...