對於具有子模塊的項目的CI構建,我想確保工作樹完全匹配在中央存儲庫中提交的狀態。如何更新本地子模塊,以便它們與子模塊的中央列表相匹配?
取出,檢查出上層項目的修訂後,我請執行下列步驟來更新子模塊:
git submodule foreach 'git reset --hard && git clean -xdf'
git submodule update --init
這似乎對所有的情況都是不同的,如果一個子模塊在中央資料庫中刪除。在這種情況下,作業工作副本仍包含已刪除的子模塊。
另外,超級項目上的git clean -xdf
似乎沒有碰到過時的子模塊。
那麼,是否有可能自動檢測陳舊的本地子模塊並刪除它們?
但是,如何自動檢測到本地子模塊是陳舊的?我正在尋找一種增量式解決方案,即不需要克隆我以前克隆過的解決方案。所以在每次獲取時盲目地移除'.git/modules/foo'不是一個選項。 – oberlies
引用自己:如果子模塊仍然作爲子模塊列在您的.git/config文件中,但已從.gitmodules中刪除,則子模塊將被上游刪除。 – SzG
對,我只需要'grep' /'awk' /'sed'把它們變成兩個列表,並將它們與'comm'進行比較。我現在會接受這個答案,但保留一旦我(或其他人)已經編寫腳本來完成您接受的答案的權利,該腳本將執行您描述的所有步驟。 – oberlies