Arrêtez un commit git par un auteur spécifique à l'aide d'un hook de pré-commit

StackOverflow https://stackoverflow.com//questions/9627198

  •  09-12-2019
  •  | 
  •  

Question

Mon plan est d'utiliser git pour suivre les modifications dans /etc, mais lors de la validation, je souhaite que la personne effectuant la modification se spécifie comme auteur en ajoutant l'option --author sur la ligne de commande.

Je voudrais donc arrêter les commits accidentels en tant que root.

J'ai essayé de créer ce hook de pré-commit mais cela ne fonctionne pas - git var renvoie toujours la racine même si je spécifie l'auteur sur la ligne de validation.

AUTHOR=`git var GIT_AUTHOR_IDENT | sed -n 's/^\(.*>\).*$/\1/p'`
if [ "$AUTHOR" == "root <root@localhost>" ];
then
   echo "Please commit under your own user name instead of \"$AUTHOR\":"
   echo 'git commit --author="Adrian"'
   echo "or if your name is not already in logs use full ident"
   echo 'git commit --author="Adrian Cornish <a@localhost>"'
   exit 1
fi
exit 0
Était-ce utile?

La solution

La version actuelle de Git ne fait pas --author informations disponibles pour les hooks Git via des variables d'environnement, des arguments de ligne de commande ou stdin.Cependant, au lieu d'exiger l'utilisation du --author ligne de commande, vous pouvez demander aux utilisateurs de définir le GIT_AUTHOR_NAME et GIT_AUTHOR_EMAIL Variables d'environnement:

#!/bin/sh
AUTHORINFO=$(git var GIT_AUTHOR_IDENT) || exit 1
NAME=$(printf '%s\n' "${AUTHORINFO}" | sed -n 's/^\(.*\) <.*$/\1/p')
EMAIL=$(printf '%s\n' "${AUTHORINFO}" | sed -n 's/^.* <\(.*\)> .*$/\1/p')
[ "${NAME}" != root ] && [ "${EMAIL}" != "root@localhost" ] || {
    cat <<EOF >&2
Please commit under your own name and email instead of "${NAME} <${EMAIL}>":
GIT_AUTHOR_NAME="Your Name" GIT_AUTHOR_EMAIL="your@email.com" git commit
EOF
    exit 1
}

Comme le --author argument, ces variables d'environnement contrôlent l'auteur du commit.Étant donné que ces variables d'environnement se trouvent dans l'environnement de Git, elles se trouvent également dans l'environnement du pre-commit crochet.Et parce qu'ils sont dans l'environnement du pre-commit crochet, ils sont transmis à git var GIT_AUTHOR_IDENT qui les utilise comme git commit fait.

Malheureusement, définir ces variables est beaucoup moins pratique que d'utiliser --author.Je suggère de contacter les développeurs Git et de leur demander de définir ces variables d'environnement (en utilisant la valeur transmise via --author) avant de lancer le pre-commit crochet.

Autres conseils

J'ai utilisé ce qui suit, ajoutant ceci aux systèmes .CASHRC.

Cela ne va pas attraper le folk qui su pour racine et vivre dans cette coquille, (mauvais!) Mais cela garde mes journaux utiles lorsque les gens utilisent juste sudo. J'essaie aussi de garder un / etc Changelog avec GIT - afin que je puisse voir ce qui a été fait de mois à mois.

#I want everyone to check in changes to /etc files, but also want their names even when they use sudo.
export GIT_COMMITTER_EMAIL=${USER}@ourcompany.co.nz
export GIT_AUTHOR_EMAIL=${USER}@ourcompany.co.nz

https://Serverfault.com/questions/256754/correcte-user-names-Quand-Tracking-etc-in-git-Repository-et-committing-as-root

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top