Git Submodule
最終更新
サブモジュールは、あるGitリポジトリを別のリポジトリの中に特定のコミットに固定して埋め込みます。親リポジトリは依存するサブモジュールのコミットを記録するため、全員が同じバージョンを取得できます。独自のリポジトリに存在する共有ライブラリやコンポーネントを、コードをコピーせずに取り込む方法です。
これらをターミナルプレイグラウンドで試してみましょう - ブラウザ内の本物のシェルで、インストール不要です。
構文
| Command | What it does |
|---|---|
git submodule add <url> libs/x | リポジトリをサブモジュールとして libs/x に追加する |
git clone --recurse-submodules <url> | リポジトリとそのサブモジュールをクローンする |
git submodule update --init --recursive | 通常のクローン後にサブモジュールを初期化して取得する |
git submodule update --remote | サブモジュールを最新のコミットに更新する |
git submodule status | 各サブモジュールのコミットを表示する |
よくあるケース
| Goal | Command |
|---|---|
| サブモジュールを使うプロジェクトをクローンする | git clone --recurse-submodules <url> |
| クローン後にサブモジュールを取得する | git submodule update --init --recursive |
| サブモジュールを最新に更新する | git submodule update --remote |
git submodule のよくある質問
git submodule とは何ですか?
サブモジュールは、別のGitリポジトリの中に固定のコミットでネストされたGitリポジトリです。親リポジトリはサブモジュールのファイルではなく、その正確なコミットへのポインタを保存するため、共同作業者は同じバージョンをチェックアウトできます。独自のリポジトリと履歴を持つ依存関係や共有コンポーネントを取り込むために使われます。
サブモジュール付きのリポジトリをクローンするには?
git clone --recurse-submodules <url> を使うと、親とそのすべてのサブモジュールを一度にクローンできます。そのフラグなしですでにクローンした場合は、後で git submodule update --init --recursive を実行してサブモジュールのフォルダを埋めてください。サブモジュールを最新のコミットに更新するには?
git submodule update --remote を実行すると、各サブモジュールの追跡ブランチを取得して最新のコミットに移動します。その後、親リポジトリで変更をコミットしてください。親はどのサブモジュールのコミットを指しているかを記録するため、そのポインタをコミットするまで更新は保存されません。クローン後にサブモジュールのフォルダが空なのはなぜですか?
--recurse-submodules なしでクローンしたため、Gitがフォルダを作成しても中身を取得しなかったからです。各サブモジュールを初期化してダウンロードする git submodule update --init --recursive で修正してください。これをオンラインで練習できますか?
はい。ターミナルプレイグラウンドを開けば、ブラウザ内の本物のシェルで
git submodule を実行できます - インストール不要です。Coddyの無料のインタラクティブなGitコースでも、リポジトリのセットアップを段階的に扱っています。