如何解决在 git pre-receive 挂钩中获取用户和提交详细信息
我是 git 和 git-hooks 的新手。我正在尝试验证所做的每一次推送,为此我需要做两件事:-
- 发起推送的用户详细信息(电子邮件 ID 和姓名)
- 提交该推送中所有提交的消息
我需要使用 Git 的 pre-receive 钩子来做到这一点,但我无法做到上述两项中的任何一项。
我一直在 SO、githooks 的文档和其他网站上搜索这个问题,但没有任何效果。
提前致谢。
解决方法
问题中有一个 gitlab
标签,所以我假设您已经阅读了 Gitlab Server Hooks。
从 githooks doc on pre-receive 中,我们可以看到钩子不带任何参数,它从标准输入读取引用信息。要读取 bash 中的标准输入,您可以参考 the pre-push sample,如果您没有在 gitconfig 中指定 .git/hooks/pre-push.sample
,也可以在本地存储库的 init.templateDir
中找到它。 pre-receive
使用与 pre-push
不同的行格式,因此修改 while read
部分,
#!/bin/bash
# <old-value> SP <new-value> SP <ref-name> LF
while read oldv newv ref;do
# get new commits
newcommits=$(git rev-list ${oldv}..${newv})
# get committer and email and message of each commit
for commit in ${newcommits};do
committer=$(git log -1 ${commit} --pretty="%cn")
email=$(git log -1 ${commit} --pretty="%ce")
message=$(git log -1 ${commit} --pretty="%B")
done
done
上面的示例遗漏了一些检查,例如 pre-push
示例中的引用创建还是删除,以及是否有任何新提交。建议添加这些检查。钩子不知道推送者的 Gitlab 帐户。提交者姓名和电子邮件可能与帐户不一致。
由于 git push
可以通过一个或多个 -o <string>
或 --push-options=<string>
向服务器发送一个或多个给定的字符串,并且 Gitlab 支持该功能,因此您也可以添加代码来接收这些字符串。您可以在 the pre-receive sample 中找到操作方法。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。