suchen

Heim  >  Fragen und Antworten  >  Hauptteil

Wie erhält der Git-Server-Hook die Commit-Informationen des Git-Clients?

Auf der Git-Serverseite gibt es drei Hooks

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

Ich möchte nach dem Empfang ein Skript ausführen und muss den Filialnamen kennen, der beim Pushen durch den Client gepusht wird. Nachdem ich viele Informationen konsultiert habe, wird jedoch nicht erwähnt, wie das Hooks-Skript Client-Push-Informationen erhält.

Zum Beispiel pusht Git-Client A einige Aktualisierungen von Zweig Hotfix1.2.3 an Git-Server B. Ich möchte ein Skript in den Hooks von Git-Server B basierend auf dem Zweignamen dieses Push-Verhaltens ausführen, der Hotfix1.2.3 ist. Wie es geht?

怪我咯怪我咯2777 Tage vor823

Antworte allen(2)Ich werde antworten

  • PHPz

    PHPz2017-05-17 10:05:16

    根据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

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

    Antwort
    0
  • 怪我咯

    怪我咯2017-05-17 10:05:16

    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)是否应该被开启,修改或者关闭。 该脚本无法终止推送进程,不过客户端在它结束运行之前将保持连接状态,所以如果你想做其他操作需谨慎使用它,因为它将耗费你很长的一段时间。

    Antwort
    0
  • StornierenAntwort