Interrompa um commit do git por um autor específico usando o gancho de pré-commit

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

  •  09-12-2019
  •  | 
  •  

Pergunta

Meu plano é usar o git para acompanhar as alterações em/etc, mas, ao confirmar, quero que a pessoa que está fazendo a alteração se especifique como autor, adicionando a opção --author na linha de comando.

Então, eu gostaria de interromper commits acidentais como root.

Tentei criar este gancho de pré-confirmação, mas não está funcionando - git var ainda está retornando root mesmo se eu especificar o autor na linha de confirmação.

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
Foi útil?

Solução

A versão atual do Git não faz --author informações disponíveis para ganchos Git por meio de variáveis ​​de ambiente, argumentos de linha de comando ou stdin.Contudo, em vez de exigir o uso do --author linha de comando, você pode instruir os usuários a definir o GIT_AUTHOR_NAME e GIT_AUTHOR_EMAIL variáveis ​​ambientais:

#!/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 o --author argumento, essas variáveis ​​de ambiente controlam o autor do commit.Como essas variáveis ​​de ambiente estão no ambiente do Git, elas também estão no ambiente do pre-commit gancho.E porque eles estão no ambiente do pre-commit gancho, eles são passados ​​para git var GIT_AUTHOR_IDENT que os usa como git commit faz.

Infelizmente, definir essas variáveis ​​é muito menos conveniente do que usar --author.Sugiro entrar em contato com os desenvolvedores do Git e solicitar que definam essas variáveis ​​de ambiente (usando o valor passado via --author) antes de lançar o pre-commit gancho.

Outras dicas

Usei o seguinte, adicionando-o ao .bashrc do sistema.

Não vai pegar gente que realmente se enraizou e vive naquela concha (ruim!) Mas mantém meus troncos úteis quando as pessoas usam apenas sudo.Eu também estou tentando manter um changelog /etc com o git - para poder ver o que foi feito mês a mês.

#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-commit-as-root

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top