git服务器的钩子如何获取git客户端的提交信息
怪我咯
怪我咯 2017-05-17 10:03:16
0
2
798

git服务器端的hooks有三个

pre-receive: 推送接受前
update: 推送更新中
post-receive: 推送接受后

我想在post-receive中执行一个脚本,需要知道客户端推送的时候推送的分支名。但是查阅不少资料
都没有提到hooks脚本如何获取客户端推送信息的方法。

比如git客户端a向git服务器b推送了分支hotfix1.2.3的一些更新,我想在git服务器b的hooks里根据这次推送行为的分支名,也就是hotfix1.2.3,执行某个脚本。如何做到呢?

怪我咯
怪我咯

走同样的路,发现不同的人生

全部回复(2)
PHPzhong

根据Server-side Hooks这个链接的内容,可以知道post-receive和pre-receive一样在执行前会得到3个参数:
<old-value> <new-value> <ref-name>

The script takes no parameters, but each ref that is being pushed is passed to the script on a separate line on standard input in the following format:
<old-value> <new-value> <ref-name>

b6b36c697eb2d24302f89aa22d9170dfe609855b 85baa88c22b52ddd24d71f05db31f4e46d579095 refs/heads/master

b6b36c697eb2d24302f89aa22d9170dfe609855b 85baa88c22b52ddd24d71f05db31f4e46d579095 refs/heads/master

ref-name和相应的hash值,就可以根据git相应的命令得到对应的信息.如git log refs/heads/master

所以既然知道了🎜.🎜
刘奇

https://git-scm.com/book/zh/v...

不同的Hook会在输入流中携带不同的参数,

pre-receive
处理来自客户端的推送操作时,最先被调用的脚本是 pre-receive。 它从标准输入获取一系列被推送的引用。如果它以非零值退出,所有的推送内容都不会被接受。 你可以用这个钩子阻止对引用进行非快进(non-fast-forward)的更新,或者对该推送所修改的所有引用和文件进行访问控制。

update
update 脚本和 pre-receive 脚本十分类似,不同之处在于它会为每一个准备更新的分支各运行一次。 假如推送者同时向多个分支推送内容,pre-receive 只运行一次,相比之下 update 则会为每一个被推送的分支各运行一次。 它不会从标准输入读取内容,而是接受三个参数:引用的名字(分支),推送前的引用指向的内容的 SHA-1 值,以及用户准备推送的内容的 SHA-1 值。 如果 update 脚本以非零值退出,只有相应的那一个引用会被拒绝;其余的依然会被更新。

post-receive
post-receive 挂钩在整个过程完结以后运行,可以用来更新其他系统服务或者通知用户。 它接受与 pre-receive 相同的标准输入数据。 它的用途包括给某个邮件列表发信,通知持续集成(continous integration)的服务器,或者更新问题追踪系统(ticket-tracking system) —— 甚至可以通过分析提交信息来决定某个问题(ticket)是否应该被开启,修改或者关闭。 该脚本无法终止推送进程,不过客户端在它结束运行之前将保持连接状态,所以如果你想做其他操作需谨慎使用它,因为它将耗费你很长的一段时间。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板