41

内部に git サブモジュールを含む git リポジトリがあります。サブモジュールは bitbucket でホストされています。サブモジュールのローカル コピーを最新のコミットに更新したいと考えています。「 git submodule update 」にうんざりしましたが、それは何もしていません。そこで、サブモジュールフォルダーを削除してから「git submodule init」を実行しようとしましたが、最新ではなく、最初のサブモジュールコミットをプルするだけです。

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

4

4 に答える 4

49

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 リポジトリのように操作して、現在のコミットが目的のものになるようにしてから、戻ってこの変更をコミットする必要があります。トップレベルのレポ。

于 2012-12-12T17:49:17.287 に答える
27

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

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
于 2017-04-21T07:11:36.663 に答える
11

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

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

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

于 2012-12-12T17:49:05.430 に答える