git大小写不敏感导致构建失败的问题

20 阅读2分钟

1. 问题引入

在页面开发完成后,当提交代码后发现 git 提示CI构建失败,报错找不到文件,错误信息如下

Could not load ***/Task-todoList/***.vue (imported by src/router/index.ts): ENOENT: no such file or directory, open '***/Task-todoList/***.vue'

但是在本地运行npm run build可以正常进行打包构建,尝试修改引入方式和路径均无法解决该问题。 最后发现本地代码路径中是Task-todoList,而 git 仓库代码中的是Task-TodoList, 所以在构建时出现了该问题。

2. 复现过程

  1. 从 git 仓库的 develop 分支拉取项目代码,此时目录中不包含Task-todoListTask-TodoList
  2. 在目录下新建Task-todoList并在Task-todoList下创建 vue 文件开发页面。
  3. 在开发过程中合并另一分支 task,该分支目录下存在一个空文件夹Task-TodoList
  4. 在合并中发现 git 合并时认为这两个文件夹是同一个文件夹,只保留了Task-TodoList文件夹并将 vue 文件合并进去。
  5. 此时本地目录下是Task-todoList,而 git 仓库目录下是Task-TodoList,所以出现了该问题。

3. 解决方案

  1. 将本地目录下的Task-todoList改为Task-TodoList,并且在路由中修改引入路径。
  2. 修改 git 上的文件目录名。
git mv dir DirTemp
git mv DirTemp Dir

4. 预防方案

修改 git 默认配置

执行git config core.ignorecase查看当前配置,默认配置下会返回 true 执行git config core.ignorecase false修改配置,关闭 git 忽略大小写配置

但是这样会出现新的问题,当修改文件名时,git 工作区会同时存在两个文件,使用git rm删除文件时,两个文件都会被删除,需要到 git 远程仓库里面手动删掉