私はpost-receive
gitのフックを持っています。gitコマンドが失敗した場合、git hookスクリプトを終了するには?
#!/bin/bash
while read oldrev newrev refname
do
branch=$(git rev-parse --symbolic --abbrev-ref $refname)
if [ -n "$branch" ] && [ "master" == "$branch" ]; then
working_tree="/path/to/working/dir"
GIT_WORK_TREE=$working_tree git checkout $branch -f
GIT_WORK_TREE=$working_tree git pull
<more instructions>
fi
done
はどのようにgitコマンドの状態を確認し、それが失敗した場合の継続からスクリプトを停止することができますか?次のような
何か:
#!/bin/bash
while read oldrev newrev refname
do
branch=$(git rev-parse --symbolic --abbrev-ref $refname)
if [ -n "$branch" ] && [ "master" == "$branch" ]; then
working_tree="/path/to/working/dir"
GIT_WORK_TREE=$working_tree git checkout $branch -f
GIT_WORK_TREE=$working_tree git pull
if [ <error conditional> ]
echo "error message"
exit 1
fi
fi
done
'とファイル名を指定して実行を/ bin/bash -e'(または 'set -e' ==' set -o errexit')を実行すると、チェックされていないコマンドが失敗したときに自動的にシェルが行います。 – PSkocik
@PSkocik '-e'は、その直感的でない意味のために一般的には推奨されません。 [set -e not inside()||](https://unix.stackexchange.com/questions/65532/why-does-set-e-not-work-inside)を参照してください。 – hvd
@hvdええ、それは絶対に 'set -e'を気にしますが、私はまだシンプルなシェルスクリプトはデフォルトで' set -e'にするべきだと思います。あまりにも悪いのはライブラリシェル関数でそれに頼ることはできません。 : – PSkocik