git一次大小写目录名导致远程仓库出现两套代码的踩坑及解决

 更新时间:2026年09月28日 10:53:41   作者:码农研究僧  
你是否遇到过Windows下修改目录大小写后,本地git status正常但远程仓库出现重复目录?本文揭秘根本原因:NTFS大小写不敏感与Git的core.ignorecase配置,并提供实战步骤清理索引中的重复路径,避免团队协作冲突

前言

在 Windows 上开发,有时候我们会顺手把目录名从小写改成驼峰,比如 emailconfig → emailConfig

改完后一看本地文件正常,IDE 也没报错,就放心地继续开发了

push 到远程后,却发现——仓库里居然同时存在 emailconfig 和 emailConfig 两套代码! 更诡异的是,本地 git status 干干净净

打开远程仓库

ruoyi-ui/src/views/system/emailconfig/      ← 旧的,还在!
ruoyi-ui/src/views/system/emailConfig/      ← 新的,也在!

本地执行 git status,输出却极其干净:

On branch xx
Your branch is up to date with 'origin/xx'.

1. 原理

1.Windows 的 NTFS 默认是大小写不敏感的

emailconfig 和 emailConfig 在 Windows 眼里是同一个文件夹

手动重命名后,文件系统只是更新了显示名称,底层路径对 Git 来说"看起来没变"

2.Git 的 core.ignorecase 默认是 true

Git 在 Windows 安装时,会自动把 core.ignorecase 设为 true

这意味着 Git 默认忽略仅大小写变化的文件名/目录名变更

3.远程仓库(Linux)是大小写敏感的

2. 实战

先确认 Git 索引里到底存了几套路径:

git ls-files | findstr "emailconfig"

输出:

ruoyi-ui/src/views/system/emailconfig/components/ConfigModal.vue
ruoyi-ui/src/views/system/emailconfig/components/TestModal.vue
ruoyi-ui/src/views/system/emailconfig/index.vue
ruoyi-ui/src/views/system/emailConfig/components/ConfigModal.vue
ruoyi-ui/src/views/system/emailConfig/components/TestModal.vue
ruoyi-ui/src/views/system/emailConfig/index.vue

实锤了:Git 索引里同时存在 emailconfig 和 emailConfig 两套记录

而 git status 之所以不显示,是因为 Windows 文件系统把这两个路径映射到了同一个物理目录,Git 认为"工作区和索引一致"

截图如下:

具体步骤如下:

# 1. 关键:让 Git 临时区分大小写,防止误删大写的目录
git config core.ignorecase false

# 2. 只从 Git 索引中删除旧的小写目录(--cached 不碰本地文件)
git rm -r --cached ruoyi-ui/src/views/system/emailconfig

# 3. 把正确的大写目录重新加入索引
git add ruoyi-ui/src/views/system/emailConfig

# 4. 查看状态,应该能看到大量 delete 和 rename
git status

# 5. 提交
git commit -m "refactor: remove duplicate emailconfig, keep emailConfig"

# 6. 推送
git push origin xx

# 7. 恢复设置(防止以后踩坑)
git config core.ignorecase true

注意事项:

  1. 不要直接 rd /s /q 删除 Windows 大小写不敏感,直接删除 emailconfig 可能会误删 emailConfig 的物理文件
  2. 不要长期保持 ignorecase=false 这个配置在团队协作中容易引发冲突,改完记得恢复

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Git忽略大小写(重命名文件)的解决办法

    Git忽略大小写(重命名文件)的解决办法

    作为一个使用 git 作为版本控制的程序员,相信各位都遇到过这种问题,文件名或目录名的大小写整错了,这是因为 git 默认不区分文件名的大小写,所以本文给大家介绍了Git忽略大小写(重命名文件)的解决办法,需要的朋友可以参考下
    2026-02-02
  • Git回退到指定版本三种方法及常见的错误

    Git回退到指定版本三种方法及常见的错误

    在Git中回退到指定版本并不是删除或撤销之前的提交,而是创建一个新的提交,该提交包含指定版本的内容,这篇文章主要给大家介绍了关于Git回退到指定版本三种方法及常见的错误,需要的朋友可以参考下
    2024-03-03
  • vscode如何设置默认打开的浏览器为Chrome

    vscode如何设置默认打开的浏览器为Chrome

    这篇文章主要介绍了vscode如何设置默认打开的浏览器为Chrome,需要的朋友可以参考下
    2020-08-08
  • Git Commit Message写错问题的解决方案

    Git Commit Message写错问题的解决方案

    作为一名开发者,提交代码时写错Commit Message是常见问题,今天就讲一下如何修改本地和远程仓库的Commit Message,重点解决“已Push到远程仓库”的场景,需要的朋友可以参考下
    2025-07-07
  • Git远程删除某个历史提交记录方法详解

    Git远程删除某个历史提交记录方法详解

    这篇文章主要为大家介绍了Git远程删除某个历史提交记录方法详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-06-06
  • 浅谈IDEA Scratch files万能的临时文件功能

    浅谈IDEA Scratch files万能的临时文件功能

    这篇文章主要介绍了浅谈IDEA Scratch files万能的临时文件功能,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-05-05
  • 通过Cursor工具使用GPT-4的方法详解

    通过Cursor工具使用GPT-4的方法详解

    Cursor 是集成了 GPT-4 的 IDE 工具,目前免费并且无需 API Key,支持 Win、Mac、Linux 平台,可以按要求生成代码,或者让 AI 帮助优化代码,分析代码,这篇文章主要介绍了通过Cursor工具使用GPT-4的方法,需要的朋友可以参考下
    2023-05-05
  • vscode+picgo+github配置免费图床(图文教程)

    vscode+picgo+github配置免费图床(图文教程)

    本文主要介绍了vscode+picgo+github配置免费图床,文中通过图文介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-01-01
  • Jenkins配置maven项目之打包、部署、发布的全过程

    Jenkins配置maven项目之打包、部署、发布的全过程

    这篇文章主要介绍了Jenkins配置maven项目,打包、部署、发布,需要的朋友可以参考下
    2022-02-02
  • 关于WebSocket协议状态码解析

    关于WebSocket协议状态码解析

    这篇文章主要介绍了关于WebSocket协议状态码的使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2025-04-04

最新评论