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