2014-06-19 1 views
2

Par habitude, je vais souvent travailler sur un changement dans ma pension, et ajouter/commettras dans une photo à l'aide git commit -am 'my commit message'Est-il possible de désactiver une option de ligne de commande "dangereuse" dans git?

Il y a des moments où je veux seulement ajouter quelques-uns des fichiers modifiés, donc je J'enverrai des commandes préparatoires git add pour configurer méticuleusement ma zone de transfert, et séparer les modifications prêtes à valider des modifications à moitié cuites.

Ensuite, je vais graisser le tout en émettant la même commande git commit -am '...' comme je le fais habituellement.

Y aurait-il un moyen de désactiver l'option git commit -a et/ou de lancer un avertissement lorsque j'utiliserais le commutateur -a? Je veux me former sur cette habitude ... peu précis

Répondre

3

Créer un script wrapper nommé git qui va attraper de mauvaises commandes et envoyer bonnes sur le vrai git. Mettez plus tôt dans votre $PATH:

#!/bin/bash 

for ARG in "${@}"; do 
    if [ "${ARG}" = "-am" ]; then 
     echo "Hey! Don’t do that!" 1>&2 
     exit 1 
    fi 
done 

exec /usr/bin/git "${@}" 

Presque toutes les commandes git fonctionnera très bien:

$ git pull 
remote: Counting objects: 1183, done. 
remote: Compressing objects: 100% (728/728), done. 
remote: Total 1183 (delta 771), reused 632 (delta 455) 
Receiving objects: 100% (1183/1183), 1.12 MiB | 1.46 MiB/s, done. 
... 

Mais ceux que vous ne voulez pas travailler ne sera pas:

$ git commit -am "foo" 
Hey! Don’t do that! 
+0

+1 Bonne réponse. – Caleb

+1

Cela ne fonctionnerait pas correctement si l'utilisateur appelle 'git commit -am" blah blah "' – loudandclear

3

Je ne sais pas d'un git config setting qui empêcherait/désavouer l'option --all/-a d'un git commit.

Vous pourriez envisager si un:

(-q pour 'calme')

qui supprimerait de la arbre de travail tout de votre modification (à l'exception de ceux déjà ajoutés à l'index)

  • post-commit crochet

    if [[ "$(git stash list|| grep "[email protected]{0}" | grep "possible commit am")" != "" ]]; then 
        git stash pop -q 
    fi 
    

Cela devrait vous permettre de taper un git commit -[a]m "a commit message" sans commettre tout.
Et si vous voulez sauter ces crochets pour une commettras:

git commit --no-verify -m "a commit message" 
+0

Note à moi-même: d'autres bons conseils autour du crochet de pré-validation: http://codeinthehole.com/writing/tips-for-using-a-git-pre-commit-hook/. Aussi intéressant https://github.com/jish/pre-commit, https://gist.github.com/Simbul/1781656 – VonC

+0

Aussi: (1) méfiez-vous de bug dans 'git stash' (noté dans le premier commentaire sur lié page); (2) notez que s'il n'y a pas de changement de stash, 'git stash -q --keep-index' est un no-op, auquel cas vous devriez * not * lancer' git stash pop -q' car il n'y avait pas de cachette poussée. Résoudre le second est délicat si vous utilisez deux crochets séparés. – torek

+0

@torek concernant le bug, je crois que vous l'expliquez à http://stackoverflow.com/a/20480591/6309. Et vous devriez être capable de vérifier si la liste de dissimulation de Git inclut une cachette faite après un possible 'commit -am': J'ai ajouté un test brut dans la réponse. – VonC

Questions connexes