web-dev-qa-db-ja.com

エラーなしで何もコミットしないgit

git commit;を実行するファブリックスクリプトを記述しようとしています。ただし、コミットするものがない場合、gitは1のステータスで終了します。デプロイスクリプトはそれを失敗したとみなし、終了します。 実際の commit-to-commitを検出したいので、git commitの失敗に対してファブリックにブランケット無視を与えることはできません。展開を続行できるように空のコミットの失敗を無視できるようにするにはどうすればよいですか?

def commit():
    local("git add -p && git commit")
68
kojiro

Git diffの終了コードをチェックして、事前にこの状態をキャッチしますか?

たとえば(シェルで):

git add -A
git diff-index --quiet HEAD || git commit -m 'bla'

編集:Holgerのコメントに従ってgit diffコマンドを修正しました。

108
Tobi

から 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.
54
Sven Marnach
_with settings(warn_only=True):
  run('git commit ...')
_

これにより、ファブリックは障害を無視します。空のコミットを作成しないという利点があります。

それをwith hide('warnings'):の追加レイヤーでラップして出力を完全に抑制することができます。そうしないと、コミットが失敗したというファブリック出力のメモが表示されます(ただし、fabfileは実行を続けます)。

5
Tyler Eaves