0
点赞
收藏
分享

微信扫一扫

Windows与Linux行尾换行符引发Git的一系列惨案


1 前言

最近在使用 Git 提交代码的时候,老是碰到一段看起来 “没有任何改动” 的代码,被 diff 检测出异常,很是苦恼,特别是项目紧急的时候,不敢用 VSCode 编辑了,只能用 vim 进行少量代码的修改、上库。

另一件事是 shell 脚本文件行尾换行符异常,导致在 linux 环境下无法正常运行,总是提示什么语法错误。

如果使用 VSCode ,可以通过右下角确认当前文件行尾换行符格式

Windows与Linux行尾换行符引发Git的一系列惨案_linux


另一种方法是,通过 vim 打开文件,使用如下命令,确认当前文件格式

# dos: Windows 行尾换行符格式
# unix: Linux 行尾换行符格式
set ff

Windows与Linux行尾换行符引发Git的一系列惨案_换行符_02

Windows与Linux行尾换行符引发Git的一系列惨案_换行符_03

我直接用的 git bash 中的 vim 打开此文件,可以发现白色背景行直接提示出来了当前文件格式。

2 行尾换行符

在遇到之前的问题时,也去网上查了不少资料,下面几篇是我当时参考的

  • ​​【Git官方文档】https://git-scm.com/book/zh/v2/%E8%87%AA%E5%AE%9A%E4%B9%89-Git-%E9%85%8D%E7%BD%AE-Git​​

行尾换行符是什么?通过资料得知,就是文件每一行结尾的换行符号。

对于 Windows 系统来说,使用的 CRLF ,也就是 \r\n (回车换行)。

但是对于 Linux 、Mac 来说,使用的为 LF ,也就是 \n (换行)。

这两个符号的差异,会导致文件格式不同。

比如会导致 CRLF 的文件,想要在 Linux 系统执行,就会出问题。

举例来说,我在 Windows 下新建一个 Shell 脚本文件,行尾换行符是 CRLF 格式的,那么此时放到 Linux 系统执行,是会报错,无法执行的。

3 Git配置

我的实际开发环境是这样的:
1、本地电脑是 Windows 10 环境,使用 VSCode 开发;
2、代码存储、编译使用的 Linux 服务器,Ubuntu 16.04 环境;
3、Windows 与 Linux 环境下均安装 Git 管理工具;

此时就有两个环境的 Git 需要配置,目前我的配置如下,已经可以正常使用了😁😁😁

Windows 环境下 Git 相关配置如下

# Windows 打开 autocrlf
# pull 时转换为 CRLF ,push 时转换为 LF
core.autocrlf=true

Linux 环境下 Git 相关配置如下

# Linux 环境关闭 autocrlf
core.autocrlf=false

# Linux 打开 safecrlf 配置,确保同一份文件只有一种统一的行尾换行符
# 如果不一致,diff 会提示差异
core.safecrlf=true

通过上述配置,这里就可以顺利的提交代码啦~


举报

相关推荐

0 条评论