我有一个与多个子模块的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