web-dev-qa-db-fra.com

Comment git ne rien engager sans erreur?

J'essaie d'écrire un script de structure qui fait un git commit; cependant, s'il n'y a rien à valider, git quitte avec le statut 1. Le script de déploiement considère que cela a échoué et se ferme. Je veux détecter réel échecs de validation, donc je ne peux pas simplement ignorer le tissu pour git commit les échecs. Comment puis-je permettre que les échecs de validation vides soient ignorés afin que le déploiement puisse se poursuivre, tout en détectant les erreurs provoquées lorsqu'un véritable commit échoue?

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

Attraper cette condition au préalable en vérifiant le code de sortie de git diff?

Par exemple (dans Shell):

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

MODIFIER: fixe git diff commande selon le commentaire de Holger.

108
Tobi

Du git commit page de manuel:

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

Cela amène le tissu à ignorer l'échec. A l'avantage de ne pas créer de commits vides.

Vous pouvez l'encapsuler dans une couche supplémentaire de with hide('warnings'): pour supprimer totalement la sortie, sinon vous obtiendrez une note dans la sortie du tissu que la validation a échoué (mais le fabfile continue de s'exécuter).

5
Tyler Eaves