web-dev-qa-db-ja.com

gitサブモジュールinitが最新のコミットを取得しない

その中にgitサブモジュールを持つgitリポジトリがあります。サブモジュールはbitbucketでホストされています。サブモジュールのローカルコピーを最新のコミットに更新したい。 "git submodule update"に疲れましたが、何もしていません。そこで、サブモジュールフォルダーを削除してから "git submodule init"を実行しようとしましたが、最新のサブモジュールコミットではなく、単に最初のサブモジュールコミットをプルしています。

ローカルサブモジュールを最新のコミットに更新するにはどうすればよいですか?

31
levi

Gitは、本来あるべきことを正確に実行しています。 git submodule updateは、サブモジュールを、親リポジトリ内の現在のコミットがサブモジュールのあるべき場所を指定するものに設定します。このようにして、別のブランチ、古いコミットまたはタグをチェックアウトし、git submodule updateを実行すると、サブモジュールがその参照が期待するものに設定されるため、ソリューション全体で依存関係が満たされます。

あなたがする必要があるのは:

cd mysubmoduledir
git fetch
git checkout master # or any other branch that you need the latest of
git merge Origin/master
cd -  # go back to the top repo
git status # should show that your submodule changed
git add mysubmoduledir
git commit -m "Updated my solution to use latest sub project."

短いバージョンは次のとおりです。

cd mysubmoduledir
git pull # assumes you are already on the branch you need to be on
cd -
git commit -am "Updated submodule" # assumes you had no other modified files

「更新」という言葉は、このサブモジュールコマンドには最適ではありません。それは本当に「親モジュールのコミットが期待するコミットをサブモジュールにポイントする」ことを意味します。

サブモジュールを別のコミットに更新するには(最新である必要はありません)、そのディレクトリにcdし、通常のgitリポジトリのように操作して、現在のコミットが必要なものになったら、戻ってこの変更をコミットする必要がありますトップレベルのレポ。

33
Adam Dymitruk

サブモジュールを追加したら、以下のコマンドを試してください。

git v 1.8.xの場合

git submodule update --init --recursive --remote

v1.7.xの場合:

git submodule update --init --recursiveまたはgit pull --recurse-submodules

v1.6.xの場合

git submodule foreach git pull Origin master

gitバージョンを確認します。

git version
10
Saad

サブモジュールを含む各gitコミットは、サブモジュールリポジトリ内の特定のコミットに関連付けられます。

git submodule updateコマンドは、サブモジュールのチェックアウトバージョンを、親リポジトリの現在のバージョンに対して記録されたコミットに更新するために提供されています。これは、たとえば、サブモジュールの古いバージョンを使用していた親リポジトリの古いバージョンを調べている場合など、そのサブモジュールで現在チェックアウトしているバージョンよりも古いバージョンである可能性があります。

サブモジュールの新しいバージョンを取得するには、そのディレクトリに切り替えて、他のgitリポジトリと同じように更新します(たとえば、上流のリポジトリからpullします)。新しいコミットを行うか、サブモジュールのソースとして使用するものとは異なるリポジトリからプルした場合は、変更をプッシュしてください。これが完了したら、親リポジトリに戻り、サブモジュールへの変更をコミットして、現在のバージョンおよび将来のバージョンのサブモジュールに現在使用している新しいサブモジュールのコミットを記録して、別の更新を行うまで続けることができます。

9
qqx