質問: git submodule foreach git pull origin master vs. git pull --recursive-submodules 私はいくつかのサブモジュールでリポジトリを管理しています。しばらくの間、私は使用しています$ git submodule foreach git pull origin master これらすべての人のために最新の変更を取り込むために。しかし、最近私は$ git pull --recurse-submodules 試してみましたが、変更はフェッチされるだけのようですので、$ git submodule update --recursive 実際に変更をチェックアウトするために。ただし、サブモジュールが明らかに変更をプルしているにもかかわらず、これは私のリポジトリでは何もしないようです。また、サブモジュールがマスターやその他のブランチではなく、コミットに対してチェックアウトされていることにも気づきました。 私は何か不適切なことをしていますか? それとも、これは私が以前行っていたforeachの方法の成果物ですか? どうすれば修正してpull --recurse-submodulesおよびsubmodule update --recursive期待どおりに機能しますか?
回答: git submodule update --recursiveは、親リポジトリのコミットに一致するようにサブモジュールを更新しています。したがって、そのコマンドで何かを行うには、親リポジトリに変更をコミットする必要があります。この設定では:/proj/.git /proj/module/.git 「モジュール」に変更を加え、コミットして、プッシュします。 「proj」では、モジュールをコミットします(サブモジュールのコミットハッシュの変更を示しているだけです)。これで、プルしてサブモジュールを更新すると、新しいコミットを使用するように「モジュール」が更新されます。