Git 2.23(2019年第3四半期):サブモジュールのクローンを作成して最新のリビジョンに更新する場合:
git clone --recurse-submodules --remote-submodules
記録されたSHA1でそれらを複製したいだけの場合:
git clone --recurse-submodules
下記参照。
Git 2.29(2020年第4四半期)は、サブモジュールの処理に関して大幅な最適化をもたらすことに注意してください。
Orgad Shaneh()によるcommit a462bee(2020年9月6日)を参照してください。( Junio C Hamanoによってマージされました---コミット2ce9d4e、2020年9月18日)orgads
gitster
submodule
:オブジェクトIDのファイル名と参照のあいまいさのチェックを抑制します
サインオフ:Orgad Shaneh
のargv引数にcollect_changed_submodules()
は、オブジェクトID(すべての参照のオブジェクト参照)のみが含まれます。
setup_revisions()
入力がファイル名ではないことを渡すことで通知します。これによりassume_dashdash,
、各参照の冗長な統計を回避できます。
refname_ambiguity
また、各オブジェクトのファイルシステムルックアップを回避するためにフラグを抑制します。同様のロジックは、cat-file、pack-objectsなどにあります。
この変更により、私のリポジトリ内の(man)の時間が25秒から6秒に短縮されます。git fetch
元の回答2010
joschiがコメントで言及しているように、オプション(Git1.6.5以降)をgit submodule
サポートするようになりました。--recursive
が指定されている場合--recursive
、このコマンドは登録されたサブモジュールに再帰し、その中にネストされたサブモジュールを更新します。
init部分については、gitサブモジュールの再帰的な操作を参照してください。
詳細については、git submodule
説明を参照してください。
git以降のバージョン1.6.5では、次の–-recursive
オプションを使用してスーパープロジェクトのクローンを作成することで、これを自動的に行うことができます。
git clone --recursive git://github.com/mysociety/whatdotheyknow.git
git 2.8を使用した2016年の更新:「?を使用してgitサブモジュールのダウンロードを高速化/並列化する方法」を参照してください。git clone --recursive
複数のスレッドを並行して使用して、サブモジュールのフェッチを開始できます。
インスタンスについて:
git fetch --recurse-submodules -j2
さらに良いことに、Git 2.23(2019年第3四半期)では、サブモジュールを1つのコマンドでトラッキングブランチに複製してチェックアウトできます!
Ben Avison()によるcommit 4c69101(2019年5月19日)を参照してください。( Junio C Hamanoによってマージされました---コミット9476094、2019年6月17日)bavison
gitster
clone
--remote-submodules
:フラグを追加
以前は、スーパープロジェクトに記録されたSHA-1ではなく、リモートトラッキングブランチでサブモジュールをチェックアウトするユースケースで、暗黙のコマンドにスイッチgit clone --recurse-submodules
を渡す方法がありませんでした。--remote
git submodule update
このパッチはこの状況を修正します。サブモジュールが複製されたばかりであるという理由で、
実際には同様に渡さ--no-fetch
れます。そのため、リモートから再度フェッチすると、処理速度が低下するだけです。git submodule update
つまり、次のことを意味します。
--[no-]remote-submodules:
複製されるすべてのサブモジュールは、スーパープロジェクトの記録されたSHA-1ではなく、サブモジュールのリモート追跡ブランチのステータスを使用してサブモジュールを更新します。に渡す--remote
のと同じgit submodule update
です。