Saya mencoba untuk menulis skrip kain yang melakukan git commit
; namun, jika tidak ada yang perlu dilakukan, git keluar dengan status 1
. Skrip penerapan menganggapnya tidak berhasil, dan berhenti. Saya ingin mendeteksi sebenarnya kegagalan-to-komit, jadi saya tidak bisa hanya memberikan kain selimut mengabaikan untuk git commit
kegagalan. Bagaimana cara mengizinkan kegagalan komit kosong untuk diabaikan sehingga penerapan dapat dilanjutkan, tetapi masih menemukan kesalahan yang disebabkan ketika komit yang sebenarnya gagal?
def commit():
local("git add -p && git commit")
git diff
ini adalah perintah "porselen" yang tidak boleh digunakan untuk pembuatan skrip. Yang paling Anda inginkan adalahgit diff-index --quiet HEAD || git commit -m 'bla'
. Lihat juga jawaban ini .git diff --quiet --exit-code --cached
adalah bahwa ia akan mengevaluasi ke1
(false) hanya untuk file yang dimodifikasi yang belum dipentaskan untuk komit (file yang tidak ditambahkan). Komentar yang dipilih secara maksimal adalah solusi terbaik untuk memperhitungkan file baru dan penghapusan.git diff-index --quiet HEAD || git commit -m 'bla'
harus menjadi jawaban dalam pertanyaan ini.Dari
git commit
halaman manual:sumber
-p
, meskipun, tapi tetapwith settings(warn_only=True): run('git commit ...')
Ini menyebabkan fabric mengabaikan kegagalan. Memiliki keuntungan karena tidak membuat komit kosong.
Anda dapat membungkusnya dalam lapisan tambahan
with hide('warnings'):
untuk menekan keluaran sepenuhnya, jika tidak, Anda akan mendapatkan catatan di keluaran fabric bahwa komit gagal (tetapi fabfile terus dijalankan).sumber
coba / tangkap bayi!
from fabric.api import local from fabric.colors import green def commit(message='updates'): try: local('git add .') local('git commit -m "' + message + '"') local('git push') print(green('Committed and pushed to git.', bold=False)) except: print(green('Done committing, likely nothing new to commit.', bold=False))
sumber
except:
, gunakanexcept Exception
atau lebih sebagai gantinya.