在服务器端使用 git 钩子,是否可以在每次有人推送到远程存储库时循环从客户端发送到服务器的新提交消息?
我需要从每条消息中提取信息,
哈希,日期,提交作者,分支
我找不到任何关于 git hooks 的好文档。我已经阅读了 git post-receive 钩子,它抓取提交消息并回发到 URL
而且我不懂一行简单的代码
在服务器端使用 git 钩子,是否可以在每次有人推送到远程存储库时循环从客户端发送到服务器的新提交消息?
我需要从每条消息中提取信息,
哈希,日期,提交作者,分支
我找不到任何关于 git hooks 的好文档。我已经阅读了 git post-receive 钩子,它抓取提交消息并回发到 URL
而且我不懂一行简单的代码
正如githooks 手册页中所解释的,post-receive 钩子为每个 ref 获取一行,包含
<旧值> SP <新值> SP <引用名称> LF
其中 <old-value> 是存储在 ref 中的旧对象名称,<new-value> 是要存储在 ref 中的新对象名称,<ref-name> 是 ref 的全名。
所以,如果你把它放在.git/hooks/post-receive
:
#!/bin/sh
while read oldvalue newvalue refname
do
git log -1 --format='%H,%cd,%an' $newvalue
git branch --contains $newvalue | cut -d' ' -f2
done
该while
语句使其遍历每一行,将行中的三个字段读取到 variables$oldvalue
中,$newvalue
并且$refname
该git log
行将输出哈希、日期、提交作者到标准输出。
该git branch
行将尝试输出分支。(或者您可以使用echo $refname
,它将以格式输出refs/heads/master
)