2013-08-26 95 views
0

不太清楚如何清楚地解釋這一點,但這裏有。Git合併已經分離的目錄

由於Tortoise-git中的一個bug,我們已經結束了這樣的情況;

我們所有的代碼應該在這樣的目錄結構下(這是Symfony2項目);

src/XYZ/OurExitingBundle 
src/XYZ/AnotherExcitingBundle 

但是,由於(我們認爲)在龜-git的錯誤,當我們拉碼到Linux操作系統中,我們有;

src/XYZ/OurExcitingBundle 
src/XYZ/AnotherExcitingBundle 
src/xyz/ourexcitingbundle 
src/xyz/anotherexcitingbundle 

(即實際的目錄,加上一個小寫的等價物)。製作我們項目的文件似乎在CamelCase和小寫目錄之間隨機分割。因爲我們正在Windows機器上開發,所以在編碼時這並不重要,但是當代碼被推送到我們的linux服務器時,一切都會結束,因爲文件不是它們應該存在的地方,或者文件存在於CamelCase目錄,但更新的版本位於小寫字母目錄中。

所以,我的問題是,有沒有辦法將小寫目錄中的所有文件合併到它們在CamelCase目錄中的等價物中,最後只有CamelCase目錄中的所有最新代碼?

非常感謝所有幫助。

回答

1

這裏有兩件事要做。最簡單的方法是確保Windows上的每個客戶端都在其每個存儲庫上設置了

core.ignorecase = true 

。這意味着git將忽略本地情況下的任何差異,並應使用與本地存儲庫中使用的大小寫相同的大小寫。

其次,所有具有不正確間距的路徑都需要在存儲庫中進行更改。這有一個副作用,那就是團隊不得不提取這個新版本的歷史記錄。 filter-branch命令通常用於這種類型的任務。這將是這樣的:

git filter-branch --tree-filter 'test -d src/xyz && for f in `git ls-files src/xyz`; do git mv "$f" src/XYZ; done' 

也有一些改變烏龜的Git來提高處理大小寫支持:

所以也值得檢查您正在使用的版本。

+0

謝謝。我們嘗試了您所建議的所有內容,但唯一有效的方法是將不正確的目錄中的所有內容手動移動到正確的目錄中。這個問題沒有重新發生,所以我懷疑這是使用老版本的烏龜。 –