git 乱改你的换行符?一句话设置让 git 不再碰你某个文件的换行符
前些天有位小伙伴告诉我说 git 改了某个重要文件的换行符,导致文件的哈希变了,于是文件校验出现错误。之前一直没问题而最近才有问题是因为最近换了部署服务器,git 的换行符配置不一样。
其实,我们不应该让代码仓库如此容易受到外界环境的影响。所以本文会解释 git 的全局配置如何影响了 git 对换行符的处理,然后说说如何彻底解决这个问题。
本文内容
- 关于换行符
- 问题
- 解决
- 原因
关于换行符
- \r = CR = Carriage-Return = 回车
- \n = LF = Line-Feed = 换行
- \r\n = CRLF = Carriage-Return Line-Feed = 回车换行
Windows 下默认的文本换行符是 \r\n
,Linux 下默认的换行符是 \n
,Mac 下默认的换行符是 \r
。因为这些差异,如果某部分文本文件会跨操作系统处理,那么换行符的处理就必须考虑了。git 允许开发者设置如何处理换行符在跨平台上的处理方式,不过不合适的设置可能带来文件发生不期望的修改。
问题
问题本身在本文一开始已经说得比较清楚了,现在疏理一下:
- 有个文本文件,被 git 改了换行符,导致哈希变化,文件校验出现了错误;
- 部署服务器以前 git 全局配置和现在不同,所以以前没问题,现在出了问题。
解决
当时,林德熙 小伙伴是负责部署服务器配置的,看到出事了立刻想到去服务器把配置改“正确”。
然而我阻止了。因为现在因为换服务器出问题,将来也会因为换服务器出问题,更普遍的,换任何环境都可能出问题。所以这问题应该从仓库着手,避免此文件被修改换行符。
于是我和小伙伴结对打开了 .gitattribute 文件,在末尾加了一行:
*.bmp binary*.jpg binary
++ *.inf binary
这样,*.inf 文件会被 git 视为二进制文件,也就不会处理换行符了。
当然,因为项目很小,所以直接改了位于项目根目录的 .gitattribute 文件。如果项目比较大,那么建议考虑在那个 .inf 文件所在的文件夹新建一个 .gitignore 文件,避免全局的设置对可能不需要生效的文件也起了作用。
原因
git 有个全局配置,在 %USERPROFILE%\.gitconfig
文件里面,可以指定如何处理文本文件的换行符:
[core]autocrlf = true
有三个可选值:
- true
- false
- input
在 Windows 系统上:
true
表示在推送时转成\n
,在拉取时转成\r\n
。这样的设置让 Windows 的开发者能兼容很多的开发工具(比如早期的记事本,新的已经支持\r\n
了),不至于遇到很多换行符问题。false
表示在推送时和拉取时都原样保留换行符。这样的设置在所有程序员都在同一个平台开发时很有用,git 完全不处理换行符,全部改由开发者自行解决。input
表示在推送时转成\n
,在拉取时原样保留换行符。注意到,这样的设置会让仓库里所有的换行符都变成\n
不再有什么时候有\r\n
了,所以对 Windows 平台的开发者并不友好。
以前的服务器全局配置没有问题,是因为服务器配置为 true
,于是拉下来时一定都是 \r\n
哈希正确。而现在全局配置是 false
,于是会原样把 git 仓库里的拉下来,哈希错误。
是的,你没看错!远程 git 仓库里的是错的!这是因为有小伙伴使用了 true
或者 input
的配置,导致推送时统一把换行符改成了 \r\n
。
我的博客会首发于 https://blog.walterlv.com/,而 CSDN 会从其中精选发布,但是一旦发布了就很少更新。
如果在博客看到有任何不懂的内容,欢迎交流。我搭建了 dotnet 职业技术学院 欢迎大家加入。
本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。欢迎转载、使用、重新发布,但务必保留文章署名吕毅(包含链接:https://walterlv.blog.csdn.net/),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。如有任何疑问,请与我联系。
git 乱改你的换行符?一句话设置让 git 不再碰你某个文件的换行符相关推荐
- 微机原理换行代码_设置段落样式的标记中,用来换行的标记是:
[判断题]( )经检验,收退货品为良品,退货上架员用RF终端设备扫描,并根据指示进行良品入库作业. [单选题]Web of Science中,SAME算符(). [多选题]在进行人员培训时必须考虑的事 ...
- 在anaconda中git找不到命令,可能是设置的git环境变量路径包含中文
问题报错 在Anaconda Navigator中打开的虚拟环境cmd,输入git --version,但是显示,git既不是外部命令,也不是内部命令. 但是在自己的win cmd中是可以识别出来的. ...
- Windows10/Servers 2016的TrustedInstaller权限获取(及乱改System后救砖
什么是TrustedInstaller 在win8.8.1.10之中高于管理员的权限,, 正确的使用姿势: 删除"正在运行中","无法删除"的流氓软件残渣. 不 ...
- Cisco pix或asa如何防止内网用户乱改ip配置案例
在pix或asa如何防止内网用户乱改ip配置案例 防止内网用户乱该ip地址,用户 只能用给定的ip,如果改ip地址,则无法访问网络资源. 例如:做了下述配置后(arp inside 10.64.64. ...
- 【发现问题】IDEA设置全局新创建文件默认换行符
今晚读<阿里Java开发手册>的代码格式部分中,第十条强制规约引起了我的注意.说的是, IDE中文件的换行符使用UNIX格式,不要使用Windows格式. 于是上网搜索为何如此,得到以下答 ...
- python中换行符怎么写_Python读写文件之换行符
系统的换行符和路径分隔符 os模块可以获取当前系统的换行符和路径分隔符 windows操作系统 >>> os.linesep '\r\n' >>> os.sep ' ...
- python获取文件换行符_python – 读取文件没有换行符
您可以使用str.splitlines读取整个文件和拆分线: temp = file.read().splitlines() 或者你可以手工剥离换行: temp = [line[:-1] for li ...
- Word框选一整段文字如何防止框到换行符?word怎么在选择的时候不选择上换行符,word选中段尾不选回车符
Word框选一整段文字如何防止框到换行符?word怎么在选择的时候不选择上换行符,word选中段尾不选回车符 如下图所示
- python读取文件去掉换行符
python读取文件去掉换行符 读取文件如何去掉换行符,代码如下: f = open('filepath','r') data = [line.strip('\n') for line in f.re ...
最新文章
- 做事情不要着急,着急只能把事情做的更加糟糕。。。
- 大学计算机无线论文范文大全,大学计算机论文范文
- SessionAttributes介绍
- matplotlib3d柱状图_Matplotlib——画图(散点图、柱状图、等高线图、3D图)
- LeetCode刷题——344. 反转字符串
- Asp.net页面传值
- 【动画演示软件】Focusky教程 | 如何使插入的视频自动播放?
- win 7更改计算机用户名和密码错误,Win7旗舰版开机显示用户名和密码错误的解决教程...
- Freebase Data Dump 结构初探(二)——浅析元信息
- c语言 打印奇数魔法阵,[luogu2119]魔法阵 NOIP2016T4
- SRM采购框架协议阶梯计价方法
- Redis 缓存回收的7种策略volatile设置过期时间及allkeys所有数据范围内
- 智禾教育:淘宝店铺的常见类型有哪些,智禾为你分享介绍
- FileReader读取文件
- 计算机桌面模糊了,显示屏模糊,详细教您怎么解决电脑屏幕模糊
- 关于电脑pe系统介绍
- 使用JSSDK实现网站的QQ登录
- uniapp 微信小程序开启分包
- 自动驾驶常用定位方案
- 绿岛FTP服务器沉浮记
热门文章
- Linux uname
- 《JavaScript DOM 编程艺术》读书笔记
- sql自动生成汉语拼音和首字母函数[转载]
- 激光打印机如何维修?
- 论文阅读——An Interactive MultiTask Learning Framework for NextPOIRecommendation with Uncertain Check-ins
- C# Event?.Invoke() 是什么意思
- CSS小技巧---线性渐变linear-gradient/径向渐变radial-gradient
- css多个属性怎么写,.css多个属性读取写法?
- html5网页综合案例制作,网页开发与制作 HTML5页面元素及属性 2-21综合案例(6页)-原创力文档...
- 联想云计算机房建设方案,联想ThinkCloud Livc桌面虚拟化解决方案