158

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

リリース、安定、最新

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

問題は「最新」の頭です。スーパープロジェクトの「最新」のヘッドが、すべてのサブモジュールのマスター ブランチを (自動的に) 追跡するようにしたいと考えています。また、サブモジュールへのすべてのコミットの履歴を表示できれば素晴らしいでしょう。

私は gitslave を見てきましたが、それは私たちが望んでいるものではありません。助言がありますか?

4

1 に答える 1

274

編集 (2020.12.28): GitHubは、2020 年 10 月以降、デフォルトのマスターブランチをメインブランチに変更します。https
://github.com/github/renaming を参照してください 。


2013 年 3 月の更新

Git 1.8.2 では、ブランチを追跡する機能が追加されました。

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

# 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マンページを参照してください:

サブモジュール内のブランチの名前が現在のリポジトリ内の現在のブランチと同じ名前であることを示すために、特別な値.が使用されます。


コミット b928922727d6691a3bdc28160f93f25712c565f6を参照してください。

submodule add:--branchが与えられた場合は、それを記録します。.gitmodules

署名者: W. Trevor King

これにより、新しいサブモジュールを追加するときに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 月):

サブモジュールは、親リポジトリによって参照される単一のコミットです。
それ自体が Git リポジトリであるため、「すべてのコミットの履歴」はgit logそのサブモジュール内からアクセスできます。

したがって、親がサブモジュールの特定のブランチの最新のコミットを自動的に追跡するには、次のことを行う必要があります。

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

gitslave (既に見たもの) は、コミット操作を含め、最適なようです。

正しいサブモジュール ブランチにチェックアウトし、変更を行い、コミットしてから、スーパープロジェクトに移動してコミットをコミットする (または少なくともサブモジュール)。

その他の代替方法については、こちらで詳しく説明しています

于 2012-02-08T08:24:48.820 に答える