¿Cómo git no cometer nada sin un error?

Estoy tratando de escribir un script de tela que hace un git commit ; sin embargo, si no hay nada que cometer, git sale con un estado de 1 . La secuencia de comandos de implementación toma eso como infructuoso, y se cierra. Quiero detectar fallas a cometer reales , por lo que no puedo simplemente ignorar a la git commit fallas de git commit errores en git commit . ¿Cómo puedo permitir que se ignoren las fallas de comillas vacías para que la implementación pueda continuar, pero aún así se detecten los errores causados ​​cuando falla una comilla real?

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

¿Captura esta condición de antemano comprobando el código de salida de git diff?

Por ejemplo (en shell):

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

EDITAR: Se git diff comando git diff según el comentario de Holger.

Desde la página del manual de git commit :

 --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 ...') 

Esto hace que la tela ignore el fallo. Tiene la ventaja de no crear confirmaciones vacías.

Puede envolverlo en una capa adicional with hide('warnings'): para suprimir totalmente la salida, de lo contrario obtendrá una nota en la salida de la tela que la confirmación falló (pero el archivo fab sigue ejecutándose).

prueba / captura bebe!

 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))