2016-12-13 69 views
0

Pretende,我有回購A,它是子模塊A.1 A.2。如何知道庫是否是子模塊

如果我運行

git clone --recursive https://github.com/A/A.git . 

將克隆的主要倉庫,它的子模塊。

但是,如果我運行:

git clone --recursive https://github.com/A/A1.git . 

我不能運行任何可以處理的主要回購等子模塊?

回答

3

您無法知道存儲庫是否是子模塊。每個在其他地方用作子模塊的存儲庫都是一個完整的獨立存儲庫。它在某個其他存儲庫中用作子模塊純粹由該主存儲庫(或存儲庫)定義。您也可以將一個存儲庫用作任意數量的主存儲庫的子模塊存儲庫。這就像問「我如何知道其他軟件包使用的包java.util.regex」或「我如何知道log4j被其他軟件用作庫」。

1

我不知道是否有100%可靠的方法知道,因爲每個子模塊都是一個完整的適當的存儲庫。但是,您可以使用這樣的事實,即當您使用子模塊克隆回購時,子模塊文件夾將具有.git文件,而不是具有.git文件夾的主(頂級)回購。因此:

test -d .git; echo $? 

將打印1,如果你是在一個子模塊和0如果在頂層回購是。爲了使它也子文件夾中工作:

(cd `git rev-parse --show-toplevel` && test -d .git); echo $? 

如果你在一個shell腳本利用這一點,有沒有必要echo過程的返回值,你可以只直接使用子shell的結果。

+0

這不是問題,是嗎? OP詢問你是否自行簽出子模塊回購協議,如何說明它在其他回購協議中作爲子模塊使用,甚至可能自動獲得主回購協議和其他兄弟會的子協議,這顯然是不可能的。 – Vampire

+1

@吸血鬼我不完全清楚問題是關於腳本將子模塊考慮進去,還是關於在子模塊之後檢查主模塊。如果你的解釋是正確的,那麼你的答案也是如此,所以我對此表示贊同。 – DUman

+0

如果您已下載頂級回購,此命令纔有效。如果你只是下載「subrepo」,.git是存在的 –

相關問題