[英]Stop a git commit by a specific author using pre-commit hook
我的计划是使用 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
在 v1.7.10.1(2012-05-01 发布)之前,Git 没有通过环境变量、命令行参数或标准输入将--author
信息提供给 Git 钩子。 然而,而不需要使用的--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
方便。 如果可以,请升级到 v1.7.10.1 或更高版本。
我使用了以下内容,将其添加到系统 .bashrc 中。
它不会抓住那些实际上 su 扎根并生活在那个 shell 中的人,(糟糕!)但是当人们只使用 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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.