Mac 上把 User.vue 改成 user.vue,提交看起来正常。Linux CI 报 Cannot find module './user.vue',服务器上 ls 出来两个文件都在,只有大小写不同。碰到这种情况,我一般先确认改动有没有真的生效。

原因不复杂,macOS 和 Windows 的文件系统默认不区分大小写,改名后本地看不出差异,Git 的 core.ignorecase 又把这次改名当成没变。Linux 区分大小写,历史里两个路径同时存在,检出后就多出一个文件。

「文件名大小写」这类改动最怕改一半,回滚脚本先准备好,再动生产。日志级别临时调高可以,记得改回去,长期开着既占磁盘又掩盖真问题。

git config core.ignorecase false
git mv --force User.vue user.vue
git commit -m 'rename User.vue to user.vue'
git ls-files | grep -i user.vue

权限不要一口气开到最大,先加到够用再往上试,范围小才好收。把复现步骤压到三条以内,交给同事也能跑出来,才算真的定位清楚。

改动写完就同步给同事,下一个人踩同一个坑,成本还是你的。

具体做法是,git config core.ignorecase 确认本地设置 临时改成 false;用 git mv --force User.vue user.vue 让 Git 记录改名;提交后 git ls-files 里只保留新名字;CI 上同样关掉 ignorecase 再跑一次构建。

最后用这个标准收尾,Linux 上 ls 只出一个 user.vue 构建不再报模块找不到。

作者 9823189