54

複数のサブモジュールを含む git リポジトリがあります。これらのサブモジュールの 1 つには、独自の複数のサブモジュールがあります。私がやろうとしているのは、マスター リポジトリで古いコミットをチェックアウトし、すべてのサブモジュールから適切なコミットをチェックアウトして、その時点でのコードの正しい状態を取得することです。

ls-treeコマンドは各サブモジュールがどのコミットにあったかを教えてくれるので、必要な情報が git に含まれていることはわかっています。ただし、それぞれを手動でチェックアウトする必要があり、非常に時間がかかります。

のようなものを探していますgit checkout --recursiveが、そのようなコマンドは存在しないようです。

とにかくこれを行うことはありますか?

4

3 に答える 3

59

これを実現するには、次の 2 つのコマンドが必要です。

git checkout *oldcommit*
git submodule update --recursive

更新:この回答は 2018 年の時点で古くなっています。最新情報については、以下の VonC の回答を参照してください。

于 2013-02-27T23:17:30.717 に答える
12

古いチェックアウトにさらにサブモジュールがあるかどうかに応じて、次の手順を実行して、新しいコミットに存在しないサブモジュールを初期化する必要がある場合があります。

git checkout *oldcommit*
git submodule init
git submodule update --recursive
于 2015-03-19T23:13:57.773 に答える