Pretende,我有回購A,它是子模塊A.1 A.2。如何知道庫是否是子模塊
如果我運行
git clone --recursive https://github.com/A/A.git .
將克隆的主要倉庫,它的子模塊。
但是,如果我運行:
git clone --recursive https://github.com/A/A1.git .
我不能運行任何可以處理的主要回購等子模塊?
Pretende,我有回購A,它是子模塊A.1 A.2。如何知道庫是否是子模塊
如果我運行
git clone --recursive https://github.com/A/A.git .
將克隆的主要倉庫,它的子模塊。
但是,如果我運行:
git clone --recursive https://github.com/A/A1.git .
我不能運行任何可以處理的主要回購等子模塊?
您無法知道存儲庫是否是子模塊。每個在其他地方用作子模塊的存儲庫都是一個完整的獨立存儲庫。它在某個其他存儲庫中用作子模塊純粹由該主存儲庫(或存儲庫)定義。您也可以將一個存儲庫用作任意數量的主存儲庫的子模塊存儲庫。這就像問「我如何知道其他軟件包使用的包java.util.regex
」或「我如何知道log4j被其他軟件用作庫」。
我不知道是否有100%可靠的方法知道,因爲每個子模塊都是一個完整的適當的存儲庫。但是,您可以使用這樣的事實,即當您使用子模塊克隆回購時,子模塊文件夾將具有.git
文件,而不是具有.git
文件夾的主(頂級)回購。因此:
test -d .git; echo $?
將打印1
,如果你是在一個子模塊和0
如果在頂層回購是。爲了使它也子文件夾中工作:
(cd `git rev-parse --show-toplevel` && test -d .git); echo $?
如果你在一個shell腳本利用這一點,有沒有必要echo
過程的返回值,你可以只直接使用子shell的結果。
這不是問題,是嗎? OP詢問你是否自行簽出子模塊回購協議,如何說明它在其他回購協議中作爲子模塊使用,甚至可能自動獲得主回購協議和其他兄弟會的子協議,這顯然是不可能的。 – Vampire
@吸血鬼我不完全清楚問題是關於腳本將子模塊考慮進去,還是關於在子模塊之後檢查主模塊。如果你的解釋是正確的,那麼你的答案也是如此,所以我對此表示贊同。 – DUman
如果您已下載頂級回購,此命令纔有效。如果你只是下載「subrepo」,.git是存在的 –