Git忽略大小寫(重命名文件)的解決辦法
1. 場景描述
作為一個使用 git 作為版本控制的程序員,相信各位都遇到過這種問題,文件名或目錄名的大小寫整錯了
場景描述
比如:想要創(chuàng)建一個文件 User.php,但是文件名打成了 user.php,并且已將 user.php 提交到了版本庫
然后,你應該會將錯誤的 user.php 修改為正確 User.php,但是發(fā)現(xiàn) git 沒有監(jiān)聽到文件發(fā)生變化
問題原因
這是因為 git 默認不區(qū)分文件名的大小寫,也就是對大小寫不敏感,所以此時 git 并不認為文件發(fā)生變化了
我的解決辦法
先嘗試使用 git mv 命令從工作區(qū)和暫存區(qū)重命名文件,發(fā)現(xiàn)是不行的,繼續(xù)嘗試其他方法
$ git mv user.php User.php fatal: destination exists, source=liang.php, destination=Liang.php
之前我遇到這種問題,會先修改其名稱(不僅僅修改大小寫),提交到版本庫,然后再修改為正確的名稱,再次提交
比如:將 user.php 修改為 user1.php 后提交到版本庫,然后再修改為 User.php,再提交到版本庫
但是,這種辦法肯定不好的,為了解決這個問題不僅僅是多了兩個提交記錄,而且還要自己去找到大小寫錯誤的文件
其實,git 提供了嚴格區(qū)分大小寫的配置項,接下來我們學習一下這個配置,當修改了名稱的大小寫,讓 git 自己去發(fā)現(xiàn)
2. 配置命令
查看當前是否忽略大小寫配置,輸出結果:true(忽略大小寫,默認配置)、false(已經(jīng)嚴格區(qū)分大小寫)
git config --get core.ignorecase
全局設置,將忽略大小寫關閉,也就是開啟大小寫敏感,從而能夠正確識別文件名大小寫的更改
git config --global core.ignorecase false
不過,有時從遠程倉庫拉取到本地時,當前項目的 git 配置可能默認就是忽略大小寫(經(jīng)測試 gitee 是這樣的)
通過查看本地倉庫配置文件內容,或者查看本地倉庫配置都可以證實
# 查看本地倉庫配置文件內容 cat .git/config # 查看本地倉庫配置中的忽略大小寫配置 git config --local --list | grep ignorecase
因為項目配置優(yōu)先級高于全局配置,所以此時全局配置開啟大小寫敏感已經(jīng)失效,需要手動設置當前項目開啟大小寫敏感
git config core.ignorecase false
3. 流程分析
開啟大小寫敏感后,修改文件名,git 能監(jiān)聽到文件變化了,直接提交是不是就可以將文件重命名成功了呢 ?
將 user.php 重命名為 User.php,查看狀態(tài)可以發(fā)現(xiàn)
- user.php 沒有提示被刪除,所以它還在被 git 管理追蹤
- User.php 是一個沒有追蹤的文件,需要將它提交到暫存區(qū)
On branch master Your branch is up to date with 'origin/master'. Untracked files: (use "git add <file>..." to include in what will be committed) User.php nothing added to commit but untracked files present (use "git add" to track)
如果直接將 User.php 提交到版本庫,會怎么樣 ?你會發(fā)現(xiàn)遠程庫既有 user.php,又有 User.php(此時你是不是很無語)
git add User.php git commit -m '將 user.php 修改為 User.php' git push
因為遠程庫有兩個相同名稱的文件(只是大小寫不同),別人 clone 倉庫時,能拉取成功,但是會有以下提示
warning: the following paths have collided (e.g. case-sensitive paths on a case-insensitive filesystem) and only one from the same colliding group is in the working tree: 'User.php' 'user.php'
所以,我們需要將遠程庫的無用的 user.php 刪除掉。然后,別人重新 clone 就可以得到正確的 User.php 了
git rm --cached user.php git commit -m '刪除暫存區(qū)中的 user.php' git push
4. 最佳實踐
首先,關閉忽略大小寫,也就是開啟大小寫敏感,修改文件名稱時讓 git 可以追蹤的到
git config core.ignorecase false
手動修改文件名稱,然后從暫存區(qū)刪除舊文件,將新文件提交到暫存區(qū)
git rm --cached user.php git add User.php
此時查看狀態(tài),也可以發(fā)現(xiàn)當前確實是一個重命名的操作
On branch master Your branch is up to date with 'origin/master'. Changes to be committed: (use "git restore --staged <file>..." to unstage) renamed: user.php -> User.php
然后正常提交并推送到遠程庫即可
git commit -m 'renamed: user.php -> User.php' git push
以上就是Git忽略大小寫(重命名文件)的解決辦法的詳細內容,更多關于Git忽略大小寫(重命名文件)的資料請關注腳本之家其它相關文章!
相關文章
深入解析Git中rebase與merge的核心區(qū)別及最佳實踐
在日常開發(fā)中,Git 是不可或缺的版本控制工具,本文將深入解析Git中rebase與merge的核心區(qū)別及最佳實踐,從而帶你徹底搞懂這兩個命令,并學會如何科學地管理 Git 分支2026-05-05
使用SSH協(xié)議解決Git推送失敗問題的具體操作方法
在日常開發(fā)中,我們常常會遇到 Git 推送失敗的問題,尤其是在初次配置遠程倉庫或網(wǎng)絡環(huán)境受限的情況下,本文將詳細介紹如何通過配置 SSH 協(xié)議解決 Git 推送失敗問題,需要的朋友可以參考下2026-01-01

