git - 在 git pre-receive 挂钩中获取用户和提交详细信息
问题描述
我是 git 和 git-hooks 的新手。我正在尝试验证所做的每一次推送,为此我需要两件事:-
- 进行推送的用户详细信息(电子邮件 ID 和姓名)
- 提交该推送中所有提交的消息
我需要使用 Git 的 pre-receive 钩子来做到这一点,但我无法完成上述两件事。
我一直在 SO、githooks 的文档和其他网站上搜索这个问题,但对我没有任何帮助。
提前致谢。
解决方案
问题中有一个gitlab
标签,所以我假设您已经阅读了 Gitlab Server Hooks。
从pre-receive 上的 githooks 文档中,我们可以看到该钩子不带任何参数,它从标准输入中读取参考信息。要在 bash 中读取标准输入,您可以参考pre-push 示例.git/hooks/pre-push.sample
,如果您没有init.templateDir
在 gitconfig 中指定,您也可以在本地存储库中找到该示例。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
示例中那样创建或删除 ref,以及是否有任何新提交。建议添加这些检查。钩子不知道推送者的 Gitlab 帐户。提交者姓名和电子邮件可能与帐户不一致。
由于git push
可以通过一个或多个发送一个或多个给定字符串到服务器,-o <string>
或者--push-options=<string>
Gitlab 支持该功能,您还可以添加代码来接收这些字符串。您可以在预接收示例中找到如何执行此操作。
推荐阅读
- android - kotlin Android studio listView in Fragment
- javascript - NodeJS 内存增长(内存泄漏)
- r - 使用 SOLR 和 R 的简单深度分页示例
- typescript - 当严重性设置为“警告”时,为什么我的 TSLint 规则会导致错误?
- ajax - 在ajax中调用.py文件
- javascript - 如何计算以 N 为底的大整数的对数?
- java - 詹金斯:无法运行程序“docker”:错误=2,没有这样的文件或目录
- angular - 如何在 Visual Studio Code 中创建配置条目以启动服务器和调试量角器测试?
- django - Django REST Framework 只允许超级用户访问 api web 视图
- environment-variables - Travis CI 环境变量会告诉我当前构建是否可以访问秘密环境变量?