Detener una confirmación de git por parte de un autor específico usando un gancho de confirmación previa
-
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
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