1. ホーム
  2. git

[解決済み] git サブモジュールトラッキング latest

2022-04-26 19:48:30

質問

私たちの(巨大な)プロジェクトをgitに移行しており、サブモジュールの使用について考えています。私たちの計画は、スーパープロジェクトに3つの異なるヘッドを持つことです。

リリース、安定版、最新版

プロジェクトリーダーは、リリースブランチと安定版ブランチを扱います。彼らは必要に応じてサブモジュールを移動させます。

問題は"latest"ヘッドです。スーパープロジェクトの "latest" ヘッドが、すべてのサブモジュールのマスターブランチを(自動的に)追跡するようにしたいと思います。そしてまた、サブモジュールへのすべてのコミットの履歴を表示してくれたら最高です。

gitslaveを見ましたが、私たちが望むものとはちょっと違います。何か提案はありますか?

解決方法は?

編集(2020.12.28): GitHubのデフォルト変更 マスター ブランチから メイン ブランチを2020年10月より開始しました。参照 https://github.com/github/renaming

以下の回答は、旧来の命名規則をそのまま反映しています。


2013年3月更新

Git 1.8.2 ブランチを追跡できるようにした。

<ブロッククオート

" git submodule への新しいモードの学習を開始しました。 リモートブランチの先端と統合する (スーパープロジェクトの gitlink に記録されているコミットと統合するのとは対照的に)。

# add submodule to track master branch
git submodule add -b master [URL to Git repo];

# update your submodule
git submodule update --remote 

もし、サブモジュールの すでに存在する ブランチを追跡するようにしたい場合は、 " を参照してください。 既存のサブモジュールにブランチを追跡させる方法 となります。

こちらもご覧ください Vogellaのサブモジュールに関するチュートリアル は、サブモジュールに関する一般的な情報です。

注意してください。

git submodule add -b . [URL to Git repo];
                    ^^^

参照 git submodule マンページ :

の特別な値です。 . は、以下のように使用されます。 サブモジュール内のブランチの名前は、現在のリポジトリの現在のブランチと同じ名前であるべきです。 .


参照 commit b928922727d6691a3bdc28160f93f25712c565f6 :

<ブロッククオート

submodule add : もし --branch が与えられたら、それを .gitmodules

署名:W.トレバー・キング

を簡単に記録することができます。 submodule.<name>.branch オプションで .gitmodules は、新しいサブモジュールを追加する際に このパッチで

$ git submodule add -b <branch> <repository> [<path>]
$ git config -f .gitmodules submodule.<path>.branch <branch>

になります。

$ git submodule add -b <branch> <repository> [<path>]

これは、今後呼び出される

$ git submodule update --remote ...

は、サブモジュールを初期化したのと同じブランチから更新を取得します。これは、通常望むことです。


オリジナルの回答(2012年2月)です。

サブモジュールは、親レポから参照される1つのコミットです。

それ自体がひとつの Git リポジトリなので、すべてのコミットの履歴にアクセスするには git log をそのサブモジュール内で使用します。

つまり、親がサブモジュールの指定されたブランチの最新コミットを自動的に追跡するためには、そうする必要があります。

  • サブモジュール内の cd
  • git fetch/pull で正しいブランチでの最新のコミットを確認します。
  • 親レポに cd で戻る
  • を追加し、サブモジュールの新しいコミットを記録するためにコミットします。

ギッツレーブ (すでに見ていただいた)が一番合っているような気がします。 コミット操作を含む .

サブモジュールに変更を加える場合、正しいサブモジュールブランチにチェックアウトし、変更を加えてコミットし、スーパープロジェクトに移動してコミットする (あるいは少なくともサブモジュールの新しい場所を記録する) 必要があり、少し煩わしいです。

その他の代替案としては 詳細はこちら .