Остановить git-коммит определенного автора, используя pre-commit hook - PullRequest
13 голосов
/ 09 марта 2012

Я планирую использовать git для отслеживания изменений в / etc, но при фиксации я хочу, чтобы лицо, вносящее изменения, указывало себя как автора, добавив параметр --author в командной строке.

Поэтому я хотел бы остановить случайные коммиты от имени пользователя root.

Я пытался создать этот хук предварительной фиксации, но он не работает - git var все еще возвращает root, даже если я указал автора в строке фиксации.

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

Ответы [ 2 ]

11 голосов
/ 09 марта 2012

Текущая версия Git не делает информацию --author доступной для перехватчиков Git через переменные окружения, аргументы командной строки или stdin.Однако вместо того, чтобы требовать использования командной строки --author, вы можете указать пользователям устанавливать переменные окружения GIT_AUTHOR_NAME и GIT_AUTHOR_EMAIL:

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

Как и аргумент --author, эти средыпеременные контролируют автора коммита.Поскольку эти переменные среды находятся в среде Git, они также находятся в среде хука pre-commit.И поскольку они находятся в среде хука pre-commit, они передаются в git var GIT_AUTHOR_IDENT, который использует их как git commit.

К сожалению, установка этих переменных гораздо менее удобна, чем использование --author.Я предлагаю связаться с разработчиками Git и попросить, чтобы они установили эти переменные среды (используя значение, переданное через --author) перед запуском pre-commit hook.

0 голосов
/ 26 марта 2014

Я использовал следующее, добавив это к системам .bashrc.

Это не поймает людей, которые на самом деле су, болеть и жить в этой оболочке, (плохо!) Но это делает мои журналы полезными, когда люди просто используют sudo. Я тоже пытаюсь вести журнал изменений / etc с помощью git - чтобы я мог видеть, что делается ежемесячно.

#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

...