【问题标题】:Stop a git commit by a specific author using pre-commit hook使用预提交挂钩停止特定作者的 git 提交
【发布时间】:2012-03-09 00:26:09
【问题描述】:

我的计划是使用 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

【问题讨论】:

标签: git hook pre-commit


【解决方案1】:

在 v1.7.10.1(2012-05-01 发布)之前,Git 没有通过环境变量、命令行参数或标准输入向 Git 挂钩提供 --author 信息。但是,您可以指示用户设置GIT_AUTHOR_NAMEGIT_AUTHOR_EMAIL 环境变量,而不是要求使用--author 命令行:

#!/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 或更高版本。

【讨论】:

  • 谢谢,这正是我想要的。我在 GIT_AUTHOR_NAME 和 GIT_AUTHOR_EMAIL 上尝试了 git var 并且它总是空白 - 这解释了原因。
  • 这不再正确,似乎适用于 GIT 2.7.4(也可能更早)。将echo $GIT_AUTHOR_NAME 放入pre-commit 钩子会打印出作者姓名(git config 中的一组或通过--author 传递的一组)。 git var GIT_AUTHOR_IDENT 似乎也可以与 --author 一起使用。
  • 看起来支持已通过此提交添加,因此将在 1.7.11 及更高版本中出现 github.com/git/git/commit/…
  • 那么新方法是什么?
【解决方案2】:

我使用了以下内容,将其添加到系统 .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

https://serverfault.com/questions/256754/correct-user-names-when-tracking-etc-in-git-repository-and-committing-as-root

【讨论】:

    猜你喜欢
    • 2015-08-17
    • 1970-01-01
    • 2019-12-25
    • 2021-09-10
    • 1970-01-01
    • 1970-01-01
    • 2015-09-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多