文章出自个人博客 https://knightyun.github.io/2021/01/18/git-ignorecase,转载请申明


首先,Windows 下 git 默认配置是对文件/文件夹名称的大小写不敏感:

git config --get core.ignorecase# true

这就导致了一些时候的难以预料问题的产生,针对这个配置,先引用一下官方帮助文档的原话:

The default is false, except git-clone or git-init will probe and set core.ignoreCase true if appropriate when the repository is created.

即 git 默认对大小写敏感,但是会在仓库克隆或初始化时,根据当前系统来设置是否忽略大小写,比如 Windows 下会设置为 true,即不敏感,而 Linux 中不会忽略;相信有不少开发者的项目开发与协同工作都是在 Windows 系统下进行的,下面就列出 git 的这种机制会导致的问题与解决思路;

规范重命名

如果分支上直接在编辑器或资源管理器上修改项目中的文件名(只变更大小写),本地虽然可以调试通过,但是 git 并不会识别和记录这个修改,所以下一次提交推送时并不会带上这个重命名修改,远程仓库中这个文件名还是保持不变;

因此,如果检出其他分支或者其他协作者拉取代码,项目就会报错,因为一个本地文件的名称如果由小写变成了大写,使用这个文件的代码部分也改成了大写,推送到远程后,远程的这个文件依然是小写,但远程上使用该文件的代码却成功变成了大写,那边启动项目就多半会提示文件不存在了;

对于这种情况 git 提供了一种规范的做法,使用 git mv 命令:

git mv test.txt TEST.txt

以此来实现对文件的重命名,同时 git 也会将其识别为 Rename 的变更类型,然后正常提交推送就能同步到远程仓库了;如果是重命名文件夹,由于 Windows 下对文件夹的大小写也不敏感(-_-),所以直接使用上面的方法会失败:

git mv test-dir TEST-DIR# Rename from 'test-dir' to 'Test-dir/test-dir' failed.

这里就只有迂回一下,先把文件夹命名成其他名称,然后再命名为大写就行了:

git mv test-dir tmp
git mv tmp TEST-DIR

修改配置

可以选择直接修改 git 配置为不忽略大小写:

git config core.ignorecase false

然后直接在资源管理器或编辑器中修改文件名大小写,git 就会识别到了,而且是被识别为 untracked 类型的变更,这依然是 Windows 下对文件名大小写不敏感导致的(=_=),如果直接推送到远程的话,那么远程仓库就会同时存在大小写两个版本的文件(github/gitlab 服务器通常都是 Linux 系统),为后期维护添加隐患,本地在分支间切换时也可能出现以下报错:

error: The following untracked working tree files would be overwritten by checkout:test.txt
Please move or remove them before you switch branches.
Aborting

这种情况下依然需要使用一些迂回的办法,就是先把要重命名的文件改成其他临时名称,提交一次(git commit),然后再把临时名称改成想要的名称,再提交一次,最后推送到远程,这样本地和远程都只保留下一个文件了;

# rename test.txt --> tmp
git add .
git commit -m "..."# rename tmp --> TEST.TXT
git add .
git commit -m "..."git push

所以不管是 Windows 还是其他系统下,还是不要轻易修改 git 默认的 core.ignorecase 配置,使用规范的 git mv 做法就好;

Git 仓库中文件名大小写问题相关推荐

  1. 从git仓库中删除.idea文件夹的小技巧

    这篇文章主要介绍了从git仓库中删除.idea文件夹的小妙招,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下 如果不配置.gitignore的文件,带push ...

  2. 列出本地git仓库中的文件?

    本文翻译自:List files in local git repo? I'm using Sparkleshare, which uses Git to sync files between my ...

  3. linux git删除的文件怎么还原,从Git仓库中恢复已删除的分支、文件或丢失的commit...

    从Git仓库中恢复已删除的分支.文件或丢失的commit 在使用Git的过程中,有时可能会有一些误操作 比如:执行checkout -f 或 reset -hard 或 branch -d删除一个分支 ...

  4. idea:idea下载git仓库中的项目

    idea下载git仓库中的项目 使用idea直接克隆git远程仓库中的项目 步骤一:选择使用git下载项目 步骤二:将git远程仓库中的项目克隆到本地 步骤三:设置项目的SDK 步骤四:设置项目源代码 ...

  5. 将本地项目上传到自己的Git仓库中【超级详细+绝不失败最终版】

    文章目录 一.新建一个自己的Git仓库 二.将本地项目上传到自己的Git仓库中 1. 快速步骤分解 2. 图文步骤详解 跟着文章一步一步来, 最后去你的码云仓库刷新一下就有项目内容了 一.新建一个自己 ...

  6. git不区分文件名大小写这种坑当然要跳出来

    关于遇到git提交文件名称不区分大小写这事儿就是个坑 java类名和和文件名不一致在IDEA里明明改好了,等从git上clone下来就是不对也是纠结了我好一阵子: 所以这时大概只好用 --force了 ...

  7. 【idea 2021.2】如何将idea中的代码推到git仓库中(最新详细版)

    一.准备好要推到git上的本地代码 如果我们的代码只在本地运行并没有连接远程git仓库,那idea的菜单栏是有所不同的 没有连接远程仓库的idea菜单栏: 连接了远程仓库的idea菜单栏: 可以看出是 ...

  8. python configure函数 循环_使用python统计git仓库中频繁修改的热点函数

    本篇博客以开源代码RT-Thread为例,描述了如何使用python扫描统计代码中频繁修改的函数,帮助我们发现系统中需求变化和BUG制造的重灾区. 需求背景 最近在学习设计模式时,印象深刻的一句话就是 ...

  9. git仓库中文件较多,如何拉取指定文件到本地

    指定操作 git init ====== 创建一个空的文件 git remote add origin 远程仓库地址链接 ====== 表示添加远程库的地址 git config core.spars ...

最新文章

  1. oracle 增加ora容量_oracle数据库报错:ORA-01653无法在表空间扩展解决办法 ,增加表空间或表空间增加数据文件...
  2. 2.5英寸硬盘何止“五脏俱全”(硬盘构造再揭秘之四)
  3. Field Service Center Customization
  4. MyBatis 源码分析系列文章导读
  5. 日常生活小技巧 -- 百度地图坐标拾取
  6. html laber上下居中,CSS未知高度垂直居中的实现
  7. TensorFlow2-简介
  8. 洛谷——P1056 排座椅
  9. 前后端分离重复提交_阿里一面:如何保证API接口数据安全?
  10. oracel 创建视图给某个用户
  11. python工作流程_讨论 - 廖雪峰的官方网站
  12. c++实现单例模式完整源代码
  13. vmware虚拟机使用教程
  14. vue 通过localStorage添加商品到购物车
  15. 从JDBC到Mybatis
  16. 玩转python(一)——微信远程控制电脑
  17. 五秒去除视频水印,这么简单的方法一定要收藏!
  18. java.sql.SQLException: sql injection violation, multi-statement not allow
  19. PPT保存为超高清图片
  20. 网络安全与计算机网络基础知识

热门文章

  1. 从Spark-Shell到SparkContext的函数调用路径过程分析(源码)
  2. 网络虚拟化基础一:linux名称空间Namespaces
  3. [deviceone开发]-doSpace应用源码开源
  4. POJ 3050 Hopscotch
  5. 完全分布式Hadoop2.3安装与配置
  6. 一个猜拳游戏的算法设计
  7. 利用INF安装服务启动 及 浅析瑞星行为检测、360主动防御
  8. 《Iphone SDK3开发快速上手》
  9. BERT: Bidirectional Encoder Representations from Transformers双向Transformer用于语言模型 NAACL 2018
  10. Java小白版聊天室1.0版本