git commit
;を実行するファブリックスクリプトを記述しようとしています。ただし、コミットするものがない場合、gitは1
のステータスで終了します。デプロイスクリプトはそれを失敗したとみなし、終了します。 実際の commit-to-commitを検出したいので、git commit
の失敗に対してファブリックにブランケット無視を与えることはできません。展開を続行できるように空のコミットの失敗を無視できるようにするにはどうすればよいですか?
def commit():
local("git add -p && git commit")
Git diffの終了コードをチェックして、事前にこの状態をキャッチしますか?
たとえば(シェルで):
git add -A
git diff-index --quiet HEAD || git commit -m 'bla'
編集:Holgerのコメントに従ってgit diff
コマンドを修正しました。
から git commit
manページ:
--allow-empty
Usually recording a commit that has the exact same tree as its
sole parent commit is a mistake, and the command prevents you
from making such a commit. This option bypassesthe safety, and
is primarily for use by foreign SCM interface scripts.
_with settings(warn_only=True):
run('git commit ...')
_
これにより、ファブリックは障害を無視します。空のコミットを作成しないという利点があります。
それをwith hide('warnings'):
の追加レイヤーでラップして出力を完全に抑制することができます。そうしないと、コミットが失敗したというファブリック出力のメモが表示されます(ただし、fabfileは実行を続けます)。