Git大小写不敏感问题避免,Jenkins代码构建失败踩坑记录

2022-01-27 08:05:20 浏览数 (1)

前几天同事遇到一个问题,代码修改完本地可以运行,提交到 gitlab ,Jenkins 构建失败,报错找不到文件(图片)。

然后改了半天的路径和引入方式:require import @/ 相对路径 都试了,还是构建失败。

最后发现本地图片文件名是大写,gitlab 上面是小写,所以导致 Jenkins 构建失败。

这就涉及到 Git 大小写敏感的问题了,简单梳理一下逻辑:

  1. 张三编写组件 button.tsx,提交代码
  2. 张三觉得组件命名不妥,改为 Button.tsx
  3. 张三并修改所有文件对它的引用,本地环境运行正常,提交代码
  4. 构建服务器通过 Git 拉取代码,进行构建,Git 未认识到 button.tsx 大小写发生变化, Jenkins 构建找不到  Button.tsx 文件,所有引用 Button.tsx 的组件发生报错,构建失败。

解决方法

解决 Git 文件名大小写不敏感的方法有多种:

1、改成别的名再改回去:

代码语言:javascript复制
# 修改文件名 button.tsx => b.tsx
git add .
git commit -m "修改文件名"
# 再改回来 b.tsx => Button.tsx
git add .
git commit -m "修回文件名"

2、使用 git mv 命令

代码语言:javascript复制
git mv button.tsx Button.tsx

不过需要注意:

如果 a.tsx 文件,在本地右键改成 A.tsx,git 是不识别有修改的。 如果 a.tsx 改成 b.tsx,git 是操作是删除 a.tsx,新增 b.tsx,会导致之前的提交记录全部丢失。 正确做法,也就是第 2 种方法,使用 git 重命名,这样 a.tsx 的修改记录会跟过来 b.tsx 。

文件夹的修改:

不过修改文件夹时会出现一些问题:

代码语言:javascript复制
git mv dir Dir

可能会报错:

代码语言:javascript复制
fatal: renaming 'dir' failed: Invalid argument

可以使用下边这个笨办法修改:

代码语言:javascript复制
git mv dir DirTemp
git mv DirTemp Dir

为什么 git 默认不区分文件夹大小写

可能是为了兼容 Windows 和 macOS。因为 Windows 和 macOS 系统文件名不区分大小写,Linux 区分大小写。

预防方案

Git 默认是忽略大小写的,如果改成不忽略大小写是不就可以了?

更改为不忽略大小写

代码语言:javascript复制
[core]
  ignorecase = false

不过,这样可能会产生更麻烦的问题:

修改文件名时,Git 工作区中一下子增加了两个文件,并且无法删除 git rm 删除文件时,工作区的两个文件都被删除

未经允许不得转载:w3h5 » Git大小写不敏感问题避免,Jenkins代码构建失败踩坑记录

0 人点赞