我有一個與多個子模塊的git回購。其中一個子模塊有其自己的多個子模塊。我所要做的就是檢查主repo上的舊提交,並讓它檢出所有子模塊的相應提交,以便當時獲得正確的代碼狀態。如何檢出包括所有子模塊的舊git提交遞歸?
我知道git包含必要的信息,因爲ls-tree
命令可以告訴我每個子模塊在哪個提交上。但是,我必須手動檢查每一個,這是非常耗時的。
我正在尋找像git checkout --recursive
這樣的東西,但似乎並不存在這樣的命令。
有沒有辦法做到這一點?
我有一個與多個子模塊的git回購。其中一個子模塊有其自己的多個子模塊。我所要做的就是檢查主repo上的舊提交,並讓它檢出所有子模塊的相應提交,以便當時獲得正確的代碼狀態。如何檢出包括所有子模塊的舊git提交遞歸?
我知道git包含必要的信息,因爲ls-tree
命令可以告訴我每個子模塊在哪個提交上。但是,我必須手動檢查每一個,這是非常耗時的。
我正在尋找像git checkout --recursive
這樣的東西,但似乎並不存在這樣的命令。
有沒有辦法做到這一點?
你需要兩個命令來實現這一目標:
git checkout *oldcommit*
git submodule update --recursive
非常感謝!當然,結果很簡單。 – 2013-02-27 23:34:15
取決於是否有更多的子模塊在舊結賬時,你可能需要做以下初始化不存在任何更多的子模塊新提交:
git checkout *oldcommit*
git submodule init
git submodule update --recursive
注意:如果你有多個子模塊(和子模塊內的子模塊),Git的2.14(Q3 2017)將有助於(更近,從2013年OP)
git checkout --recurse-submodules
使用
--recurse-submodules
將根據記錄在超級項目中的提交更新所有已初始化的子模塊的內容。
如果子模塊中的本地修改將被覆蓋,則使用-f
時,結帳將失敗。
「git checkout --recurse-submodules
」沒有相當的工作與 子模塊本身有子模塊。它將與Git 2.14。
注意:'git checkout --recurse-submodules'現在確實存在(2017)。但只有即將推出的Git 2.14才能正常工作。請參閱[我的答案](https://stackoverflow.com/a/44249558/6309)。 – VonC 2017-05-29 19:52:14