Git推送后Gitlab/GitHub文件夹结构未更新 同时显示大小写不同同名文件夹
问题成因
- Windows、macOS默认使用的文件系统为大小写不敏感但保留大小写模式,名称仅大小写不同的文件夹会被判定为同一对象,本地修改文件夹大小写后不会触发异常。
- Git默认在上述系统中会开启
core.ignoreCase = true配置,不会识别到仅大小写不同的文件名/文件夹名变更,仅会提交对应文件夹内的内容变更,不会删除版本库中旧的大写文件夹记录。 - GitLab、GitHub等远程服务端底层运行在大小写敏感的Linux文件系统上,版本库中残留的大写文件夹记录和新提交的小写文件夹会被判定为两个独立目录,因此会出现远程显示两个文件夹、但克隆到本地后仅显示一个的异常情况。
可行解决方法
单次修复当前异常
- 提前备份本地
components文件夹内的所有代码,避免操作失误丢失内容。 - 执行命令删除Git版本库中残留的大写文件夹记录,不影响本地文件:
git rm -r --cached Components
- 提交小写文件夹的所有变更:
git add components/ git commit -m "fix: 修复目录大小写导致的远程重复文件夹问题"
- 推送变更到远程仓库即可,推送完成后远程的重复目录会自动消失。
永久避免同类问题
- 本地Git全局配置关闭大小写忽略,后续修改文件名/文件夹大小写时Git可正常识别变更:
git config --global core.ignoreCase false
- 团队协作项目可在项目根目录的
.git/config文件中单独添加core.ignoreCase = false配置,统一所有协作者的规则。
注意:关闭大小写忽略后,不要创建名称仅大小写不同的文件/文件夹,否则会在Windows、macOS设备上出现文件覆盖冲突问题。
内容的提问来源于stack exchange,提问作者Lucas Gabriel
相关产品推荐
相关产品推荐

