前些天有位小伙伴告诉我说 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 允许开发者设置如何处理换行符在跨平台上的处理方式,不过不合适的设置可能带来文件发生不期望的修改。

问题

问题本身在本文一开始已经说得比较清楚了,现在疏理一下:

  1. 有个文本文件,被 git 改了换行符,导致哈希变化,文件校验出现了错误;
  2. 部署服务器以前 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 不再碰你某个文件的换行符相关推荐

  1. 微机原理换行代码_设置段落样式的标记中,用来换行的标记是:

    [判断题]( )经检验,收退货品为良品,退货上架员用RF终端设备扫描,并根据指示进行良品入库作业. [单选题]Web of Science中,SAME算符(). [多选题]在进行人员培训时必须考虑的事 ...

  2. 在anaconda中git找不到命令,可能是设置的git环境变量路径包含中文

    问题报错 在Anaconda Navigator中打开的虚拟环境cmd,输入git --version,但是显示,git既不是外部命令,也不是内部命令. 但是在自己的win cmd中是可以识别出来的. ...

  3. Windows10/Servers 2016的TrustedInstaller权限获取(及乱改System后救砖

    什么是TrustedInstaller 在win8.8.1.10之中高于管理员的权限,, 正确的使用姿势: 删除"正在运行中","无法删除"的流氓软件残渣. 不 ...

  4. Cisco pix或asa如何防止内网用户乱改ip配置案例

    在pix或asa如何防止内网用户乱改ip配置案例 防止内网用户乱该ip地址,用户 只能用给定的ip,如果改ip地址,则无法访问网络资源. 例如:做了下述配置后(arp inside 10.64.64. ...

  5. 【发现问题】IDEA设置全局新创建文件默认换行符

    今晚读<阿里Java开发手册>的代码格式部分中,第十条强制规约引起了我的注意.说的是, IDE中文件的换行符使用UNIX格式,不要使用Windows格式. 于是上网搜索为何如此,得到以下答 ...

  6. python中换行符怎么写_Python读写文件之换行符

    系统的换行符和路径分隔符 os模块可以获取当前系统的换行符和路径分隔符 windows操作系统 >>> os.linesep '\r\n' >>> os.sep ' ...

  7. python获取文件换行符_python – 读取文件没有换行符

    您可以使用str.splitlines读取整个文件和拆分线: temp = file.read().splitlines() 或者你可以手工剥离换行: temp = [line[:-1] for li ...

  8. Word框选一整段文字如何防止框到换行符?word怎么在选择的时候不选择上换行符,word选中段尾不选回车符

    Word框选一整段文字如何防止框到换行符?word怎么在选择的时候不选择上换行符,word选中段尾不选回车符 如下图所示

  9. python读取文件去掉换行符

    python读取文件去掉换行符 读取文件如何去掉换行符,代码如下: f = open('filepath','r') data = [line.strip('\n') for line in f.re ...

最新文章

  1. 做事情不要着急,着急只能把事情做的更加糟糕。。。
  2. 大学计算机无线论文范文大全,大学计算机论文范文
  3. SessionAttributes介绍
  4. matplotlib3d柱状图_Matplotlib——画图(散点图、柱状图、等高线图、3D图)
  5. LeetCode刷题——344. 反转字符串
  6. Asp.net页面传值
  7. 【动画演示软件】Focusky教程 | 如何使插入的视频自动播放?
  8. win 7更改计算机用户名和密码错误,Win7旗舰版开机显示用户名和密码错误的解决教程...
  9. Freebase Data Dump 结构初探(二)——浅析元信息
  10. c语言 打印奇数魔法阵,[luogu2119]魔法阵 NOIP2016T4
  11. SRM采购框架协议阶梯计价方法
  12. Redis 缓存回收的7种策略volatile设置过期时间及allkeys所有数据范围内
  13. 智禾教育:淘宝店铺的常见类型有哪些,智禾为你分享介绍
  14. FileReader读取文件
  15. 计算机桌面模糊了,显示屏模糊,详细教您怎么解决电脑屏幕模糊
  16. 关于电脑pe系统介绍
  17. 使用JSSDK实现网站的QQ登录
  18. uniapp 微信小程序开启分包
  19. 自动驾驶常用定位方案
  20. 绿岛FTP服务器沉浮记

热门文章

  1. Linux uname
  2. 《JavaScript DOM 编程艺术》读书笔记
  3. sql自动生成汉语拼音和首字母函数[转载]
  4. 激光打印机如何维修?
  5. 论文阅读——An Interactive MultiTask Learning Framework for NextPOIRecommendation with Uncertain Check-ins
  6. C# Event?.Invoke() 是什么意思
  7. CSS小技巧---线性渐变linear-gradient/径向渐变radial-gradient
  8. css多个属性怎么写,.css多个属性读取写法?
  9. html5网页综合案例制作,网页开发与制作 HTML5页面元素及属性 2-21综合案例(6页)-原创力文档...
  10. 联想云计算机房建设方案,联想ThinkCloud Livc桌面虚拟化解决方案