私はこのような何かをしたい:
# fetch updates, but don't merge yet
git fetch # origin is default
# list all branches
git for-each-ref --format='%(refname:short)' refs/heads |
while read branch; do
# if the branch is not the same as the remote branch...
if [ "$(git rev-parse $branch)" != "$(git rev-parse origin/$branch)" ]; then
# only continue to the next step on successful results
git checkout $branch &&
git pull &&
(make &&
cp executable /somewhere/else;
make clean)
# except always make clean as long as we tried to make
#
# you might also consider a hard reset and clean, to guarantee things
# are safe for the next checkout
fi
done
最初のフェッチのいいところは、あなたが不必要に変更せずに枝をチェックアウトする必要がないことです。レポが大きければ、これは時間を節約することができます。
明らかにエラーを処理する選択肢があります。私はちょうど理にかなったもっとも単純なものに行きました。
# die hard on unexpected checkout/pull failures
if ! (git checkout $branch && git pull); then
exit 1
fi
if make; then
cp executable /somewhere/else
else
# report a build failure?
fi
# clean up no matter what
git clean -xdf
git reset --hard
サイドノート:より複雑な処理のために、あなたの代わりにフォーム
if make; then ...; else ...; fi
、例えばの事をやりたいかもしれませんあなたは '作るclean'ルール、' Gitのclean'の完全性をテストしようとしていない場合(おそらく、オプション '-x -d -f';マンページを参照してください)を使用して、未追跡のものすべてを消去して、ビルドが本当にクリーンな状態にあるかどうかを確認することができます。 – Cascabelおかげさまで、私はgit cleanがここで多くの意味を持つかもしれないと思います。 –