當git上檔名大小寫重新命名的修改時(git大小寫敏感/預設不敏感),如何重新命名並提交
git預設是大小寫不敏感!!!
加了感嘆號是什麼意思呢,意思就是這本身就是一個坑,本人使用的IDE是idea(網上說Eclipse可以避開問題),這個IDE本身就集成了git,但是如果要在terminal使用git命令,還需先安裝並配置好git環境變數,然後在idea配置git安裝路徑。。。。扯遠了,先說說這個坑,在idea上對檔案大小寫重新命名時,比如DataExt.java改成Dataext.java,git是不會做辨認的,即使你看到的是Dataext.java,等到你push到遠端分支上去,你會發現分支上的還是DataExt.java,這時別人要是merge你的分支或者checkout下來時,就報錯啦。
如何避免:
哎,你上網一搜,都是說把git設定成大小寫敏感 git config core.ignorecase false(其實這也是個坑)。。。。
我就分情況解決吧:
1、先說一下git大小寫不敏感,也就是預設的情況下如何解決:(建議預設)
使用命令:git mv DataExt.xml Dataext.xml
ps: 資料夾重新命名 git mv foldername tempname && git mv tempname folderName (在大小寫不敏感的系統中,如windows,重新命名資料夾的大小寫,使用臨時檔名)
此時暫存區的檔案已改動
接下來commit到本地分支,最後push上遠端分支
1 |
|
使用IDE的可以操作介面提交併推送。
2、接下來要說那些設定了大小寫敏感的怎麼提交:(不建議設定)
為什麼說設定了大小寫敏感也是個坑,因為假設
分支 | 檔案 |
A | DataExt.java |
B | Dataext.java |
我在本地的分支B設定了git config core.ignorecase false,並且檔案是小寫的Dataext.java,接下來如果merge了分支A的話,會出現錯誤:
error: The following untracked working tree files would be overwritten by merge:
DataExt.java
意思是:分支A中的DataExt.java將會重寫分支B的檔案
那這樣的話,假設路人甲和乙都是使用分支A的,你merge他們,就會提示檔案將被重寫。。。坑啊!
解決方法都是將core.ignorecase設定為true,然後再進行操作,那設定為false又有何意義?
哎。。。對於設定了大小寫敏感的修改檔名大小寫要怎麼提交呢?
首先 記住 將你的檔案備份!
然後刪除
1 |
|
,將備份檔案重新命名Dataext.java放到路徑下,新增
1 |
|
,提交
1 |
|