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. 复现过程
- 从 git 仓库的 develop 分支拉取项目代码,此时目录中不包含
Task-todoList
或Task-TodoList
。 - 在目录下新建
Task-todoList
并在Task-todoList
下创建 vue 文件开发页面。 - 在开发过程中合并另一分支 task,该分支目录下存在一个空文件夹
Task-TodoList
。 - 在合并中发现 git 合并时认为这两个文件夹是同一个文件夹,只保留了
Task-TodoList
文件夹并将 vue 文件合并进去。 - 此时本地目录下是
Task-todoList
,而 git 仓库目录下是Task-TodoList
,所以出现了该问题。
3. 解决方案
- 将本地目录下的
Task-todoList
改为Task-TodoList
,并且在路由中修改引入路径。 - 修改 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 远程仓库里面手动删掉