目录
- 一、Git 对文件名大小写不敏感
- 1.1 问题描述
- 1.2 原因分析
- 1.3 解决方案
- 方式一:使用git命令进行修改
- 方式二:关闭git 忽略大小写配置 (可以当前项目设置,也可以全局设置 `--global`)
- 二、新的问题(重复的目录)
- 2.1 问题描述
- 2.2 原因分析
- 2.3 解决方案
- 三、总结
- 参考资料
一、Git 对文件名大小写不敏感
1.1 问题描述
在Windows系统里,当 仅修改文件名大小写 时,git未检测到文件变更
1.2 原因分析
这个行为是由文件系统的不同规则引起的。
- 在类Unix文件系统(例如Linux和macOS)上,文件名是区分大小写的,
- 而在Windows文件系统上,默认情况下是不区分大小写的。
git 默认对大小写敏感,但是会在仓库克隆或初始化时,根据当前系统来设置是否忽略大小写,比如 Windows 下会设置为 true
,即不敏感,而 Linux 中不会忽略;
引用官方原文的话:
The default is
false
, exceptgit-clone
orgit-init
will probe and set core.ignoreCasetrue
if appropriate when the repository is created.
1.3 解决方案
注意:如果你修改文件目录的名字后,再执行方式二,会出现新的问题。
我们建议用方式一修改目录后,再执行方式二。或者,我们执行方式二后,再随便修改目录。
方式一:使用git命令进行修改
使用 git mv
命令修改文件名
git mv -f [你想要删掉的文件] [你想要留下的文件]
git mv -f a.js A.js 等同于:
git rm a.js
git add A.js
将文件从一个目录移动到另一个目录
git mv test-dir TEST-DIR
如果是重命名文件夹,由于 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 忽略大小写配置 (可以当前项目设置,也可以全局设置 --global
)
执行 git config core.ignorecase
查看当前配置,不出意外,返回true
执行 git config core.ignorecase false
修改配置,关闭 git 忽略大小写配置
二、新的问题(重复的目录)
2.1 问题描述
假设我们将原来的 Java
目录修改 java
目录,则仓库会出现以下两种现象:
-
现象一:当关闭git 忽略大小写配置后,我们将 修改 push到远程仓库。这时会出现一个新的问题:
Java
目录和java
目录会同时存在 github 远程仓库里面。 -
现象二:
clone
和pull
下来的文件却只有java
目录。
2.2 原因分析
现象一原因:github 远程仓库对大小写敏感,可以区分 Java
目录 和 java
现象二原因:在仓库克隆或初始化时,根据当前系统来设置是否忽略大小写。因此, Java
目录 和 java
目录会冲突,Java
目录里面的内容被覆盖。
2.3 解决方案
解决方案查看:解决 Git 默认不区分文件名大小写和同名文件共存的问题 - 简书 (jianshu.com),
- 到 github 远程仓库里面手动删掉
- 在 linux系统里,git clong 仓库,将重复的目录给删掉,然后 push。
三、总结
在 Windows 系统里面运行 git 时,我们尽量开启 git config core.ignorecase false
这一配置。
参考资料
Git 仓库中文件名大小写问题 (knightyun.github.io)
Git文件名大小写不敏感问题及解决方案 - 掘金 (juejin.cn)