Windows中Git对文件名大小写不敏感的问题解决方法
文章目录
- 前言
- 一、Git 对文件名大小写不敏感
- 方法1.使用git命令进行修改
- 方法2.关闭git 忽略大小写配置 (可以当前项目设置,也可以全局设置 --global)
- 二、新的问题(重复的目录)
- 原因分析
- 解决方法
前言
Git是一个免费的、开源的分布式版本控制系统
,可以高速处理从小型到大型的各种项目
版本控制:是一种记录文件内容变化,以便将来查阅特定版本修订情况的系统
– 集中式版本控制工具:如CVS、
SVN
等,都有一个单一的几种管理服务器,保存所有文件的修订版本,而协同工作的人通过客户端连接到这台服务器,从而取出最新的文件或者提交更新。缺点:中央服务器的单点故障;多(程序员)对一(中央服务器)
– 分布式版本控制工具:如git,
客户端取的不是最新的文件快照,而是把代码仓库完整的镜像下来到本地库(克隆/备份)
一、Git 对文件名大小写不敏感
默认情况下,在windows系统中,git不区分文件名大小写(linux系统会区分),所以如果开发环境是windows系统的话,当我们修改文件名大小写时,git无法识别出文件的变化,导致仓库和本地环境的文件名不一致。
查看本地状态:git status
方法1.使用git命令进行修改
git mv -f [你想要删掉的文件] [你想要留下的文件]
git mv -f a.c A.c
等同于:
git rm a.c
git add A.c
将文件从一个目录移动到另一个目录
git mv test-dir TEST-DIR
如果是重命名文件夹,由于 Windows 下对文件夹的大小写也不敏感(-_-),所以直接使用上面的方法会失败:
# Rename from 'test-dir' to 'Test-dir/test-dir' failed.
解决方法,需要找个中间名
git mv test-dir tmp
git mv tmp TEST-DIR
方法2.关闭git 忽略大小写配置 (可以当前项目设置,也可以全局设置 --global)
执行 git config --get core.ignorecase 查看当前配置,不出意外,返回true
执行 git config core.ignorecase false 修改配置,关闭 git 忽略大小写配置
# 全局配置
git --global config core.ignoreCase false
注意:如果你修改文件目录的名字后,再执行方式二,会出现新的问题。
我们建议用方式一修改目录后,再执行方式二。或者,我们执行方式二后,再随便修改目录。
二、新的问题(重复的目录)
假设我们将原来的 UDS目录修改 uds 目录,则仓库会出现以下两种现象:
现象一:当关闭git 忽略大小写配置后,我们将修改push到远程仓库。这时会出现一个新的问题:UDS目录和 uds目录会同时存在 github 远程仓库里面。
现象二:clone和pull下来的文件却只有 uds目录。
原因分析
现象一原因:github 远程仓库对大小写敏感,可以区分 UDS目录 和 uds
现象二原因:在仓库克隆或初始化时,根据当前系统来设置是否忽略大小写。因此, UDS目录 和 uds目录会冲突,UDS目录里面的内容被覆盖。
解决方法
到 github 远程仓库里面手动删掉