文本换行符号(^M)导致的 git diff 问题

原文链接:文本换行符号 (^M) 导致的 git diff 问题 | 👨🏻‍🌾 苏子叶的技术菜园

问题的现象

文件改动了一点,但是在 gitlab/github 看 diff 却发现整个文件全部都进行了改动,且文件变的乱序或者变成了一行。

原因: 文件换行符导致

文本换行符号通常有: LF 和 CRLF。

首先介绍 LF 和 CRLF 下是什么:

  • CRLF: 是 carriagereturnlinefeed 的缩写。中文意思是回车换行;
  • LF: 是 line feed 的缩写,中文意思是换行;
  • CR: 是 carriagereturn 的缩写。中文意思是回车;

为什么换行回车会不同呢? 主要的原因在于操作系统之间的分歧:

  • 早期的 macOS 系统使用 CR 当做换行,现在也已经统一成了 LF。
  • Unix(包含现在大量使用的 linux) 系统使用 LF
  • Windows 系统使用 LFCR 当做换行

也正是因为不同系统的分歧,在多人协作共同开发的时候,可能导致提交代码时候产生问题。

解法

1. IDE 或者代码编辑器中统一将换行符修改为: LF

2. 在 git 中进行配置

git 为了防止以上问题扰乱跨平台合作开发,使用命令可以转化 LF 和 CRLF
具体命令为:

  1. git config --global core.autocrlf true: Git 可以在你 push 时自动地把行结束符 CRLF 转换成 LF,而在 pull 代码时把 LF 转换成 CRLF。用 core.autocrlf 来打开此项功能,如果是在 Windows 系统上,把它设置成 true,这样当签出代码时,LF 会被转换成 CRLF

  2. git config --global core.autocrlf input: Linux 或 Mac 系统使用 LF 作为行结束符;当一个以 CRLF 为行结束符的文件不小心被引入时你肯定想进行修正,把 core.autocrlf 设置成 input 来告诉 Git 在 push 时把 CRLF 转换成 LF,pull 时不转换

  3. git config --global core.autocrlf false: 在本地和代码库中都保留 CRLF,无论 pull 还是 push 都不变,代码库什么样,本地还是什么样子

参考链接:

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值