Git修改文件夹大小写问题

前因

今天在写需求的时候,看到组件的文件夹为小写,所以打算将其改为大写开头,使用了以下操作:

1
2
3
4
5
## 查看git忽略大小写情况
git config --get core.ignorecase
## 关闭忽略大小写
git conig core.ignorecase false
复制代码

然后在本地将文件夹的命名进行了修改操作,add -> commit -> push,一顿操作后将修改推送到了远端。

后来在部署测试环境的时候遇到了报错,大致意思就是“文件重复了,它们仅仅文件夹的大小写不同”,我到仓库一看,果然有两个文件夹:

image.png

解决方法

在网上寻找了两种解决方法,如下:

方法一

1
2
3
4
5
6
7
8
9
10
11
12
## 关闭忽略大小写
git conig core.ignorecase false

## 删除无用的文件夹下的所有文件
git rm --cached 要删除文件夹路径(注意大小写,删除小写的就写小写) -r

## 如果删除多个可以拼接
git rm --cached 文件夹1路径 文件夹2路径 -r

## 提交,推送到远程仓库
commit -> push
复制代码

方法二

  1. 删除本地所有待修正文件夹,然后在待commit列表中,会发现有大写,也有小写文件夹下的文件,均处于删除状态

  2. 将想要删除的文件夹add到暂存区

  3. commit -> push

  4. 将不想删除的文件夹从工作区撤回

问题原因

由于Windows和Mac系统默认是不区分大小写的,但是Linux是区分大小写的。

所以当我们将将文件夹的名称由小写改成大写后,对于Windows和Mac系统来说,文件是没有变化的。

也因此,在修改命名为大写后,执行git status的结果中,显示只增加了一些文件,该删除的文件并没有显示被删除,所以当我们在这种情况下commit一条记录后,实际上git中原来的小写文件夹并没有被删除,而是大写和小写共存了。

此时将记录push到远程,由于服务器一般都是Linux系统,所以可以将大写和小写文件夹一同展示出来。所以就出现了这个文件夹重复的问题。

当然,这个原因也有我个人的猜测在里面,毕竟没有去刨git的源码😂。

最后

  1. git默认是忽略大小写的,建议保留默认配置,不要随意修改,避免出现不必要的麻烦。

  2. 文件夹命名也可以使用“中划线”的形式,这样就不会有文件夹大小写的问题。

参考文章

  1. blog.csdn.net/weixin_4929…

  2. t.zoukankan.com/linys2333-p…

  3. www.cnblogs.com/qianguyihao…

转载:https://juejin.cn/post/7109435103968755726