嵌套git庫的管理
使用git作為源代碼管理時,經常需要在一個git代碼庫中從外網獲取新的git庫,也就是在git庫下嵌套另外一個git庫。而同時維護兩個git庫的過程就變的非常復雜。
submodule的弊端
常見的做法是使用git 提供的submodule功能。但submodule的管理嵌套git庫的結果往往不是我們期望的結果。假設有一個git庫叫project,在project的某個子目錄下還包含一個叫3rd的目錄,是另外一個git庫。
D:.
└─project
└─3rd
mytext.txt
假設甲和乙都取了project的代碼,由于時間差異,甲通過submodule取到V1版,而乙取到了V2版本。甲乙同時在不同的3rd庫下進行開發,勢必會造成不同的運行結果。也許你認為可以在獲取submodule時指定版本,但這個獲取過程很難控制。
一般說來,第三方庫應由主程序進行更新及維護,一般情況下,項目沒有特殊需求時,不會隨便更新第三方庫到最新版本,因此submodule更新嵌套的git庫并不是理想的解決方案。
嵌套git庫的修改可見性
前面的例子中,project git庫下的3rd的git庫中如果有文件發生修改,此時在project目錄下,使用sourceTree等git管理工具無法識別3rd下的文件修改。
也就是說,無法將3rd下的修改提交到project的git庫中。
終極解決方案
此時,將3rd目錄下的.git目錄暫時移出project和3rd目錄,此時,在project目錄用sourceTree查看時,將可以看到3rd下的文件修改,提交修改到project庫中。再將剛移出去的3rd的.git目錄移回3rd目錄下,在3rd目錄下使用git status,將可看到3rd目錄的修改,提交時,會將修改提交到3rd目錄。