web-dev-qa-db-ja.com

切り離されたHEADを実際のHEADにアタッチするサブモジュールを作成するにはどうすればよいですか?

このようにGitサブモジュールをGitリポジトリに追加すると、

git submodule add ssh://server/proj1/ proj1
git submodule init
git submodule update

追加されたサブモジュールは切り離されたHEADモードになります。それが何であるかはよくわかりませんが、サブモジュールがターゲットリポジトリの特定のリビジョンにリンクされることは知っています。

実際にどのように機能するのかわかりませんが、とにかくプロキシブランチがそこに存在するように見えます。マスターブランチに切り替えることでこれを解決しました。

cd proj1
git checkout master

これにより、現在のブランチの実際のマスターHEADが切り替わりますが、リンケージは更新されません。したがって、リポジトリ全体のクローンを再度作成しても、古いリビジョンにリンクされたままになります。

常に最新のリビジョン(HEAD)にリンクさせたい場合は、どうすればよいですか?

25
Eonil

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のチュートリアル も参照してください。


元の回答(2011年12月)

追加されたサブモジュールはデタッチされますHEADモード

はい、サブモジュールは特定のコミットを参照することであり、ブランチではありません。
そう:

  • コミットSHA1(またはタグ)をチェックアウトすると、デタッチされたHEADモードになります。
  • ブランチをチェックアウトする場合(サブモジュールのmasterブランチで行ったように)、そのブランチの上に他のコミットを作成できます(ただし、親をコミットするには、親リポジトリに戻る必要があります)同様に、作成した新しいサブモジュールコミットを記録する必要があるため)

詳細については、「 サブモジュールの本質 "」を参照してください。

別のリポジトリの最新のコミットが常に必要な場合、最も簡単な方法は、それらをマージすることです(たとえば、サブツリーのマージを使用)。
詳細と参照については、「 2つの同じリポジトリGITをマージ "」を参照してください。

35
VonC