2012-03-09 77 views
13

我的计划是使用git来跟踪/ etc中的更改,但是在提交时我希望让进行更改的人员通过添加 - 命令行上的作者选项。使用预先提交的钩子阻止特定作者的git落实

所以我想停止意外的提交作为根。

我试着创建这个预提交钩子,但它不工作 - 即使我在提交行指定作者,git var仍然返回根目录。

AUTHOR=`git var GIT_AUTHOR_IDENT | sed -n 's/^\(.*>\).*$/\1/p'` 
if [ "$AUTHOR" == "root <[email protected]>" ]; 
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 <[email protected]>"' 
    exit 1 
fi 
exit 0 
+1

这是令人惊讶似乎没有成为一种方式来获得这方面的资料。我可以确认'git var GIT_AUTHOR_IDENT'显示原始作者,而不是通过'--author'提供的作者... – Borealid 2012-03-09 00:42:25

+0

切向也是https://gist.github.com/tripleee/16767aa4137706fd896c – tripleee 2014-06-09 12:32:39

回答

10

的Git的当前版本不会使通过环境变量,命令行参数或标准输入提供给Git的挂钩--author信息。然而,而不需要使用--author命令行的,你可以指导用户设置GIT_AUTHOR_NAMEGIT_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}" != "[email protected]" ] || { 
    cat <<EOF >&2 
Please commit under your own name and email instead of "${NAME} <${EMAIL}>": 
GIT_AUTHOR_NAME="Your Name" GIT_AUTHOR_EMAIL="[email protected]" git commit 
EOF 
    exit 1 
} 

--author说法,这些环境变量控制提交的作者。由于这些环境变量在Git环境中,因此它们也处于pre-commit挂钩的环境中。并且因为他们处于pre-commit挂钩的环境中,所以他们被传递给git var GIT_AUTHOR_IDENT,使用它们就像git commit那样。

不幸的是,设置这些变量比使用--author方便得多。我建议联系Git开发人员并要求他们在启动pre-commit钩子之前设置这些环境变量(使用通过--author传递的值)。

+0

感谢这和我完全一样通缉。我在GIT_AUTHOR_NAME和GIT_AUTHOR_EMAIL上试用了git var,它一直都是空白 - 这就解释了原因。 – 2012-03-09 14:49:32

+0

这是不正确anylonger,似乎与GIT 2.7.4(mabye也早)工作。将'echo $ GIT_AUTHOR_NAME'放在'pre-commit'钩子中打印出作者的名字(无论是在git config中设置的名称还是通过'--author'传递的名称)。 'git var GIT_AUTHOR_IDENT'似乎也适用于'--author'。 – lumbric 2018-03-10 19:06:03

0

我使用了以下内容,将其添加到系统.bashrc中。

它不会吸引那些真正扎根并住在那个壳里的民众,(坏!) 但是,当民间使用sudo时,它确实保持我的日志有用。 我也在试着用git保存一个/ etc的更新日志 - 这样我就可以看到每个月做了些什么。

#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

相关问题