Stoppen Sie einen Git-Commit eines bestimmten Autors mithilfe des Pre-Commit-Hooks
-
09-12-2019 - |
Frage
Mein Plan besteht darin, Git zu verwenden, um Änderungen in /etc zu verfolgen, aber beim Festschreiben möchte ich, dass die Person, die die Änderung vornimmt, sich selbst als Autor angibt, indem sie die Option --author in der Befehlszeile hinzufügt.
Daher möchte ich versehentliche Commits als Root verhindern.
Ich habe versucht, diesen Pre-Commit-Hook zu erstellen, aber er funktioniert nicht – git var gibt immer noch root zurück, selbst wenn ich den Autor in der Commit-Zeile angebe.
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
Lösung
Die aktuelle Version von Git macht das nicht --author
Informationen, die Git-Hooks über Umgebungsvariablen, Befehlszeilenargumente oder stdin zur Verfügung stehen.Anstatt jedoch die Verwendung des zu verlangen --author
In der Befehlszeile können Sie Benutzer anweisen, das festzulegen GIT_AUTHOR_NAME
Und GIT_AUTHOR_EMAIL
Umgebungsvariablen:
#!/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
}
Wie --author
Argument: Diese Umgebungsvariablen steuern den Autor des Commits.Da sich diese Umgebungsvariablen in der Git-Umgebung befinden, befinden sie sich auch in der Umgebung von pre-commit
Haken.Und weil sie sich in der Umgebung der befinden pre-commit
Haken, sie werden weitergegeben git var GIT_AUTHOR_IDENT
was sie gerne nutzt git commit
tut.
Leider ist das Festlegen dieser Variablen viel weniger praktisch als das Verwenden --author
.Ich schlage vor, die Git-Entwickler zu kontaktieren und sie zu bitten, diese Umgebungsvariablen festzulegen (unter Verwendung des über übergebenen Werts). --author
), bevor Sie das starten pre-commit
Haken.
Andere Tipps
Ich habe Folgendes verwendet und das System hinzugefügt .Bashrc.
Es fängt das Volk nicht auf, der eigentlich in dieser Schale wurzelt und lebt, (schlecht!) Aber es hält meine Protokolle nützlich, wenn Folk nur Sudo verwenden. Ich versuche auch, ein / etc Changelog mit Git zu halten - also kann ich sehen, was monatlich monatlich gemacht wurde. generasacodicetagpre.