Git忽略大小寫(xiě)(重命名文件)的解決辦法
1. 場(chǎng)景描述
作為一個(gè)使用 git 作為版本控制的程序員,相信各位都遇到過(guò)這種問(wèn)題,文件名或目錄名的大小寫(xiě)整錯(cuò)了
場(chǎng)景描述
比如:想要?jiǎng)?chuàng)建一個(gè)文件 User.php,但是文件名打成了 user.php,并且已將 user.php 提交到了版本庫(kù)
然后,你應(yīng)該會(huì)將錯(cuò)誤的 user.php 修改為正確 User.php,但是發(fā)現(xiàn) git 沒(méi)有監(jiān)聽(tīng)到文件發(fā)生變化
問(wèn)題原因
這是因?yàn)?git 默認(rèn)不區(qū)分文件名的大小寫(xiě),也就是對(duì)大小寫(xiě)不敏感,所以此時(shí) git 并不認(rèn)為文件發(fā)生變化了
我的解決辦法
先嘗試使用 git mv 命令從工作區(qū)和暫存區(qū)重命名文件,發(fā)現(xiàn)是不行的,繼續(xù)嘗試其他方法
$ git mv user.php User.php fatal: destination exists, source=liang.php, destination=Liang.php
之前我遇到這種問(wèn)題,會(huì)先修改其名稱(不僅僅修改大小寫(xiě)),提交到版本庫(kù),然后再修改為正確的名稱,再次提交
比如:將 user.php 修改為 user1.php 后提交到版本庫(kù),然后再修改為 User.php,再提交到版本庫(kù)
但是,這種辦法肯定不好的,為了解決這個(gè)問(wèn)題不僅僅是多了兩個(gè)提交記錄,而且還要自己去找到大小寫(xiě)錯(cuò)誤的文件
其實(shí),git 提供了嚴(yán)格區(qū)分大小寫(xiě)的配置項(xiàng),接下來(lái)我們學(xué)習(xí)一下這個(gè)配置,當(dāng)修改了名稱的大小寫(xiě),讓 git 自己去發(fā)現(xiàn)
2. 配置命令
查看當(dāng)前是否忽略大小寫(xiě)配置,輸出結(jié)果:true(忽略大小寫(xiě),默認(rèn)配置)、false(已經(jīng)嚴(yán)格區(qū)分大小寫(xiě))
git config --get core.ignorecase
全局設(shè)置,將忽略大小寫(xiě)關(guān)閉,也就是開(kāi)啟大小寫(xiě)敏感,從而能夠正確識(shí)別文件名大小寫(xiě)的更改
git config --global core.ignorecase false
不過(guò),有時(shí)從遠(yuǎn)程倉(cāng)庫(kù)拉取到本地時(shí),當(dāng)前項(xiàng)目的 git 配置可能默認(rèn)就是忽略大小寫(xiě)(經(jīng)測(cè)試 gitee 是這樣的)
通過(guò)查看本地倉(cāng)庫(kù)配置文件內(nèi)容,或者查看本地倉(cāng)庫(kù)配置都可以證實(shí)
# 查看本地倉(cāng)庫(kù)配置文件內(nèi)容 cat .git/config # 查看本地倉(cāng)庫(kù)配置中的忽略大小寫(xiě)配置 git config --local --list | grep ignorecase
因?yàn)轫?xiàng)目配置優(yōu)先級(jí)高于全局配置,所以此時(shí)全局配置開(kāi)啟大小寫(xiě)敏感已經(jīng)失效,需要手動(dòng)設(shè)置當(dāng)前項(xiàng)目開(kāi)啟大小寫(xiě)敏感
git config core.ignorecase false
3. 流程分析
開(kāi)啟大小寫(xiě)敏感后,修改文件名,git 能監(jiān)聽(tīng)到文件變化了,直接提交是不是就可以將文件重命名成功了呢 ?
將 user.php 重命名為 User.php,查看狀態(tài)可以發(fā)現(xiàn)
- user.php 沒(méi)有提示被刪除,所以它還在被 git 管理追蹤
- User.php 是一個(gè)沒(méi)有追蹤的文件,需要將它提交到暫存區(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 提交到版本庫(kù),會(huì)怎么樣 ?你會(huì)發(fā)現(xiàn)遠(yuǎn)程庫(kù)既有 user.php,又有 User.php(此時(shí)你是不是很無(wú)語(yǔ))
git add User.php git commit -m '將 user.php 修改為 User.php' git push
因?yàn)檫h(yuǎn)程庫(kù)有兩個(gè)相同名稱的文件(只是大小寫(xiě)不同),別人 clone 倉(cāng)庫(kù)時(shí),能拉取成功,但是會(huì)有以下提示
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'
所以,我們需要將遠(yuǎn)程庫(kù)的無(wú)用的 user.php 刪除掉。然后,別人重新 clone 就可以得到正確的 User.php 了
git rm --cached user.php git commit -m '刪除暫存區(qū)中的 user.php' git push
4. 最佳實(shí)踐
首先,關(guān)閉忽略大小寫(xiě),也就是開(kāi)啟大小寫(xiě)敏感,修改文件名稱時(shí)讓 git 可以追蹤的到
git config core.ignorecase false
手動(dòng)修改文件名稱,然后從暫存區(qū)刪除舊文件,將新文件提交到暫存區(qū)
git rm --cached user.php git add User.php
此時(shí)查看狀態(tài),也可以發(fā)現(xiàn)當(dāng)前確實(shí)是一個(gè)重命名的操作
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
然后正常提交并推送到遠(yuǎn)程庫(kù)即可
git commit -m 'renamed: user.php -> User.php' git push
以上就是Git忽略大小寫(xiě)(重命名文件)的解決辦法的詳細(xì)內(nèi)容,更多關(guān)于Git忽略大小寫(xiě)(重命名文件)的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
深入解析Git中rebase與merge的核心區(qū)別及最佳實(shí)踐
在日常開(kāi)發(fā)中,Git 是不可或缺的版本控制工具,本文將深入解析Git中rebase與merge的核心區(qū)別及最佳實(shí)踐,從而帶你徹底搞懂這兩個(gè)命令,并學(xué)會(huì)如何科學(xué)地管理 Git 分支2026-05-05
使用Postman測(cè)試需要授權(quán)的接口問(wèn)題
Postman是一款免費(fèi)的http模擬請(qǐng)求工具,常用來(lái)測(cè)試開(kāi)發(fā)接口。實(shí)際場(chǎng)景中,很多接口是需要授權(quán)才能使用,這篇文章主要介紹了用Postman測(cè)試需要授權(quán)的接口,需要的朋友可以參考下2022-06-06
怎樣寫(xiě)commit?log記錄及如何提交有哪些約定
這篇文章主要為大家介紹了怎樣寫(xiě)commit?log記錄以及及如何提交有哪些約定,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-06-06
低版本VS項(xiàng)目在VS2019無(wú)法正常編譯的問(wèn)題
這篇文章主要介紹了低版本VS項(xiàng)目在VS2019無(wú)法正常編譯的問(wèn)題,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-08-08
使用SSH協(xié)議解決Git推送失敗問(wèn)題的具體操作方法
在日常開(kāi)發(fā)中,我們常常會(huì)遇到 Git 推送失敗的問(wèn)題,尤其是在初次配置遠(yuǎn)程倉(cāng)庫(kù)或網(wǎng)絡(luò)環(huán)境受限的情況下,本文將詳細(xì)介紹如何通過(guò)配置 SSH 協(xié)議解決 Git 推送失敗問(wèn)題,需要的朋友可以參考下2026-01-01

