#!/bin/bash
# pre-commit hook
if [ "$GIT_AUTHOR_NAME" = "DEFAULT" ]; then
echo 'Please first specify your name and e-mail with the following commands:' >&2
echo 'export GIT_AUTHOR_NAME="<Your Name>"' >&2
echo 'export GIT_AUTHOR_EMAIL="<Your E-Mail>"' >&2
echo 'export GIT_COMMITTER_NAME="$GIT_AUTHOR_NAME"' >&2
echo 'export GIT_COMMITTER_EMAIL="$GIT_AUTHOR_EMAIL"' >&2
exit 1
fi
2条答案
按热度按时间kfgdxczn1#
在经历了几个兔子洞之后,我最终使用了位于我的repo中的
post-commit
客户端钩子:[REPO]/.git/hooks/post-commit
。必须确保文件post-commit
没有扩展名并且是可执行的。我认为这种特殊的策略最适合用例,因为它允许作者修改为每次提交的预期用户,以及利用git托管平台将电子邮件地址与适当的用户名相关联的能力。git push
有几个可以调用的钩子,然而,最好是在提交消息输入后捕获,以防在输入后不能立即保证推送。下面的脚本将提示用户输入作者,提交消息的电子邮件地址(* 让提示符工作有点棘手,但这个SO answer帮了大忙 *)。由于正常运行git commit
会导致递归发生,因为post-commit
* 不会影响git commit的结果 *,因此会创建一个文件并销毁,以防止在设置新的环境值后出现无限循环。字符串
nxowjjhe2#
首先需要正确区分
git commit
和git push
:git commit
在本地存储库中创建一个新提交,并在提交中记录用户名和电子邮件git push
用于将新的本地提交/分支同步到远程存储库-无需更改/编辑推送的提交git push
中涉及的唯一“用户”是访问远程存储库服务器所需的凭据。因此,您需要寻找的是如何在
git commit
时设置正确的作者(和提交者)。如
git commit
手册页中所述,此信息来自GIT_AUTHOR_NAME
,GIT_AUTHOR_EMAIL
,.)user.name
和user.email
git commit --author=...
其中后者可以被配置为
git config user.name ...
(即,在[REPO]/.git/config
中),或git config --global user.name ...
(即,每个操作系统用户,以~/.gitconfig
为单位)。因此,要在使用同一系统用户登录时使用不同的作者名,
1.让你的用户总是使用
--author
标志提交1.只需给予每个人他们自己的存储库本地副本,并在该目录中使用
git config user.name ...
配置他们各自的名称1.相应地设置
GIT_AUTHOR_NAME
等环境变量从这些1.只有当你的用户在每次提交(和合并!)时提供正确的
--author
标志时才能可靠地工作。2.是一个很好的解决方案,只要你不需要/不想只有一个本地仓库。但是3.可能是最好的解决方案-如果你能可靠地设置环境变量的话。为此,你可以使用,例如,
~/.bashrc
or~/.profile
,其中你可以从用户那里read
和export
,GIT_AUTHOR_NAME
等-这也只需要在登录时做一次,而不是每次提交。奖励提示:
你可以在本地仓库中设置一个空的
user.name
和user.email
,以防止在没有明确指定作者(使用--author=...
或GIT_AUTHOR_NAME
)时使用不正确的作者提交-如果git
无法确定作者姓名,它将中止任何提交。或者,你可以通过设置一个已知的默认名称(例如,
git config user.name "DEFAULT"
)并使用pre-commit
钩子来验证GIT_AUTHOR_NAME
不是DEFAULT
,否则会中止提交,并显示一条错误消息,指导用户如何正确设置作者名称:字符串