Ich versuche, ein Fabric-Skript zu schreiben, das a git commit
; Wenn jedoch nichts festgeschrieben werden muss, wird git mit dem Status "beendet" 1
. Das Bereitstellungsskript nimmt dies als nicht erfolgreich an und wird beendet. Ich möchte tatsächliche Fehler beim Festschreiben erkennen, daher kann ich Fabric nicht einfach eine pauschale Ignorierung für git commit
Fehler geben. Wie kann ich zulassen, dass Fehler beim leeren Festschreiben ignoriert werden, damit die Bereitstellung fortgesetzt werden kann, aber dennoch Fehler abfangen, die verursacht werden, wenn ein echtes Festschreiben fehlschlägt?
def commit():
local("git add -p && git commit")
git diff
ein "Porzellan" -Befehl ist, der nicht für die Skripterstellung verwendet werden sollte. Was Sie höchstwahrscheinlich wollen, istgit diff-index --quiet HEAD || git commit -m 'bla'
. Siehe auch diese Antwort .git diff --quiet --exit-code --cached
darin, dass es1
nur für geänderte Dateien (false) ausgewertet wird , die nicht für das Festschreiben bereitgestellt wurden (nicht hinzugefügte Dateien). Der hochgestimmte Kommentar ist die beste Lösung, um neue Dateien und Löschungen zu berücksichtigen.git diff-index --quiet HEAD || git commit -m 'bla'
sollte eine Antwort auf diese Frage sein.Von der
git commit
Manpage:quelle
-p
zwar, aber immer nochwith settings(warn_only=True): run('git commit ...')
Dies führt dazu, dass Fabric den Fehler ignoriert. Hat den Vorteil, dass keine leeren Commits erstellt werden.
Sie können es in eine zusätzliche Ebene
with hide('warnings'):
einschließen, um die Ausgabe vollständig zu unterdrücken. Andernfalls wird in der Fabric-Ausgabe eine Notiz angezeigt, dass das Festschreiben fehlgeschlagen ist (die Fabfile wird jedoch weiterhin ausgeführt).quelle
versuche / fang Baby!
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))
quelle
except:
,except Exception
oder so.