Detener una confirmación de git por parte de un autor específico usando un gancho de confirmación previa

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

  •  09-12-2019
  •  | 
  •  

Pregunta

Mi plan es usar git para realizar un seguimiento de los cambios en/etc, pero al realizar la confirmación quiero que la persona que realiza el cambio se especifique como autor agregando la opción --author en la línea de comando.

Por eso me gustaría detener las confirmaciones accidentales como root.

Intenté crear este enlace de confirmación previa, pero no funciona: git var todavía devuelve root incluso si especifico el autor en la línea de confirmación.

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
¿Fue útil?

Solución

La versión actual de Git no hace --author información disponible para los enlaces de Git a través de variables de entorno, argumentos de línea de comandos o stdin.Sin embargo, en lugar de requerir el uso de la --author línea de comando, puede indicar a los usuarios que configuren el GIT_AUTHOR_NAME y GIT_AUTHOR_EMAIL Variables de entorno:

#!/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
}

Como el --author argumento, estas variables de entorno controlan el autor de la confirmación.Debido a que estas variables de entorno están en el entorno de Git, también están en el entorno de pre-commit gancho.Y debido a que están en el ambiente del pre-commit gancho, se pasan a git var GIT_AUTHOR_IDENT que los usa como git commit hace.

Desafortunadamente, configurar estas variables es mucho menos conveniente que usar --author.Sugiero contactar a los desarrolladores de Git y solicitarles que establezcan estas variables de entorno (usando el valor pasado a través de --author) antes de lanzar el pre-commit gancho.

Otros consejos

Utilicé lo siguiente, agregando esto a los sistemas .bashrc.

No atrapará a la gente, ¿quién realmente SU para rootear y vivir en esa cáscara, (malo!) Pero sí, mantiene mis troncos útiles cuando Folk solo usa sudo. Yo también estoy tratando de mantener a / etc. Changelog con Git, así que puedo ver lo que se ha hecho mes a mes.

#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/correct-user-names-when-tracking-etc-in-git-repository-and-committing-as-root

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top