在 git 预接收挂钩中获取用户和提交详细信息
Get user and commit details in git pre-receive hooks
我是 git 和 git-hooks 的新手。我正在尝试验证所做的每一次推送,为此我需要两件事:-
- 进行推送的用户详细信息(电子邮件 ID 和姓名)
- 该推送中所有提交的提交消息
我需要使用 Git 的预接收钩子来做到这一点,但我无法完成上述两件事。
我一直在 SO、githooks 的文档和其他网站上搜索这个问题,但对我没有任何帮助。
提前致谢。
问题中有一个gitlab
标签,所以我假设你已经阅读了Gitlab Server Hooks。
来自 githooks doc on pre-receive, we can see that the hook doesn't take any parameter and it reads ref info from standard input. To read from standard input in bash, you can refer to the pre-push sample,如果你没有在 gitconfig 中指定 init.templateDir
,你也可以在本地存储库的 .git/hooks/pre-push.sample
中找到它。 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
示例中那样创建或删除了引用,以及是否有任何新的提交。建议添加这些检查。 hook 不知道 pusher 的 Gitlab 账号。提交者姓名和邮箱可能与账号不符
由于 git push
可以通过一个或多个 -o <string>
或 --push-options=<string>
将一个或多个给定字符串发送到服务器并且 Gitlab 支持该功能,您还可以添加代码来接收这些字符串。您可以在 the pre-receive sample.
中找到操作方法
我是 git 和 git-hooks 的新手。我正在尝试验证所做的每一次推送,为此我需要两件事:-
- 进行推送的用户详细信息(电子邮件 ID 和姓名)
- 该推送中所有提交的提交消息
我需要使用 Git 的预接收钩子来做到这一点,但我无法完成上述两件事。
我一直在 SO、githooks 的文档和其他网站上搜索这个问题,但对我没有任何帮助。
提前致谢。
问题中有一个gitlab
标签,所以我假设你已经阅读了Gitlab Server Hooks。
来自 githooks doc on pre-receive, we can see that the hook doesn't take any parameter and it reads ref info from standard input. To read from standard input in bash, you can refer to the pre-push sample,如果你没有在 gitconfig 中指定 init.templateDir
,你也可以在本地存储库的 .git/hooks/pre-push.sample
中找到它。 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
示例中那样创建或删除了引用,以及是否有任何新的提交。建议添加这些检查。 hook 不知道 pusher 的 Gitlab 账号。提交者姓名和邮箱可能与账号不符
由于 git push
可以通过一个或多个 -o <string>
或 --push-options=<string>
将一个或多个给定字符串发送到服务器并且 Gitlab 支持该功能,您还可以添加代码来接收这些字符串。您可以在 the pre-receive sample.