2016-09-19 19 views
0

大きなプロジェクトを管理するためにgitサブモジュールを使用しています。この大規模プロジェクトの中に約20個のサブモジュールがあり、サブモジュールは頻繁に更新されません。サブモジュールコミットがリポジトリと同じであることを確認してください

git submodule updateコマンドを実行する前に、スーパープロジェクトのインデックスにすでに指定されているコミットをチェックアウトするようにgitに指示する前に、コミットがサブモジュールに存在するかどうかをチェックしますか?

git branch --contains $SHAのようなものですが、サブモジュール用です。

それが存在しない場合、私はコミットcontaintたりしないサブモジュール内git fetchをしたいと思っgit submodule foreach git pull理想的

私はすべての20個のサブモジュールのためのgit submodule foreach git pullを行うことを避けるとやりたいですサブモジュールコミットがリポジトリが指しているものと異なる場合はgit fetchを実行してください。

答えて

1
git submodule foreach --quiet \ 
'git branch --contains <sha1> 2>/dev/null || echo $(basename $(pwd)) no such commit' 

は、現在、それは現在のブランチである場合にコミット(または、むしろ現在のツリー内)とはそのようなコミットそうでない場合(||の後の部分)がありませんことを、印刷に関する情報を出力します。

||以降の部分は、情報を初期化する代わりにgit fetchを実行するために使用できます。

+0

これは本当にありがとうございます。最後の質問が1つあります。サブモジュールが親レポポイントをコミットする最善の方法を知っていますか? 'git rev-parse ^{commit}:' –

+0

を使ってこれを行うことができました。つまり、フェッチする前にサブモジュールに存在するかどうかを確認するコミットです。 –

+0

'git submodule update'を実行し、' git submodule status'を実行します。 Statusは、現在master repoに固定されているサブモジュールのsha1をすべて返します。 – Zloj

関連する問題