0. 前言
文章的內(nèi)容為轉(zhuǎn)載昧旨,如需更加詳細(xì)的說(shuō)明可以跳轉(zhuǎn)這里挨决。
1. 簡(jiǎn)介
Windows/Mac OS 操作系統(tǒng)文件的大小寫(xiě)是不敏感的敦锌,不管文件路徑是何種奇怪的大小寫(xiě),我們始終可以以另一種大小寫(xiě)的方式訪(fǎng)問(wèn)到這個(gè)路徑種的文件或者文件夾谬泌。Linux 操作系統(tǒng)文件的大小寫(xiě)卻是敏感的滔韵,不同大小寫(xiě)意味著不同的路徑。于是掌实,Windows 下的 A 文件在 Docs 文件夾下陪蜻,B 文件在 docs 文件夾下,最終效果是 A B 都在 docs 文件夾下潮峦;而同樣的情況放到 Linux 中囱皿,A B 就在兩個(gè)不同的文件夾勇婴。
Git 是大小寫(xiě)不敏感的忱嘹,導(dǎo)致跨操作系統(tǒng)共享的 Git 倉(cāng)庫(kù)就會(huì)遇到上面的情況。如果重命名的文件或文件夾只有大小寫(xiě)不同耕渴,那么對(duì) Git 來(lái)說(shuō)甚至都沒(méi)有變化拘悦。閱讀本文將解決 Git 大小寫(xiě)不敏感導(dǎo)致的重命名無(wú)效的問(wèn)題。
2. 問(wèn)題產(chǎn)生
之前在使用 Git 的時(shí)候橱脸,由于我之前在創(chuàng)建 package 時(shí)础米,一時(shí)手殘,把一個(gè)字母打成了大寫(xiě)添诉,然后在沒(méi)檢查的情況下提交了……
但是我本地的庫(kù)由于沒(méi)有不區(qū)分大小寫(xiě)屁桑,因此在我修改完提交后,就出現(xiàn)了下圖這樣包名不一致的結(jié)果
但是這個(gè)問(wèn)題栏赴,在本地運(yùn)行的時(shí)候沒(méi)有任何問(wèn)題蘑斧,但是萬(wàn)一以后再遇到相同的問(wèn)題或者有其他項(xiàng)目運(yùn)行出問(wèn)題,本著折騰「強(qiáng)迫癥」的習(xí)慣须眷,開(kāi)始搜索解決方法竖瘾。
3. 解決方法
這是堆棧網(wǎng)那位只有 70+ 贊的方法的改進(jìn)版本。先將文件夾重命名為臨時(shí)文件夾花颗,然后再?gòu)呐R時(shí)文件夾恢復(fù)成正常文件夾捕传。
但是「劃重點(diǎn)」中間需要先 commit 一次,否則和前面的方法效果一樣扩劝,會(huì)存在兩份文件夾庸论!
$ git mv ./Docs ./docs.bak
$ git add .
$ git commit -m "改名(第 1/2 步)"
$ git mv ./docs.bak/ ./docs
$ git add .
$ git commit -m "改名(第 2/2 步)"
$ git push
中間的 git add .
其實(shí)是可以不需要的,因?yàn)? mv
命令會(huì)自動(dòng)將修改加入暫存區(qū)棒呛。
最終把遠(yuǎn)程庫(kù)改為了下圖
4.使用 Windows 10 四月更新的特性(推薦)
在 Windows 10 四月更新聂示,文件夾名稱(chēng)也能區(qū)分大小寫(xiě)? 一文中提到可以使用 fsutil.exe file SetCaseSensitiveInfo
使某個(gè)特定的文件夾支持區(qū)分大小寫(xiě)条霜。
經(jīng)過(guò)嘗試催什,使用此方法后,git 能夠支持一次提交完美解決僅大小寫(xiě)的文件夾改名問(wèn)題,完全不用管 git 的某種配置或其他任何因素蒲凶。
首先气筋,使用管理員權(quán)限在當(dāng)前文件夾啟動(dòng) PowerShell:
然后允許一下命令,以便開(kāi)啟此文件夾的大小寫(xiě)敏感功能旋圆。
> cd '切換至需要開(kāi)啟大小寫(xiě)敏感的目錄'
> fsutil.exe file SetCaseSensitiveInfo . enable
隨后宠默,你可以像一般重命名一樣去修改文件夾名稱(chēng),然后像普通提交一樣去 git commit灵巧。直接能生成一個(gè)僅修改文件夾名稱(chēng)大小寫(xiě)的新提交搀矫。
如果你在執(zhí)行以上命令時(shí)出現(xiàn)了問(wèn)題,請(qǐng)移步至 Windows 10 四月更新刻肄,文件夾名稱(chēng)也能區(qū)分大小寫(xiě)瓤球? 尋找解決方法。