Git Server Hooks - 它们是在客户端/克隆机器上本地执行的吗?

时间:2015-10-09 11:39:35

标签: git hook

设定:

我在Windows机器上拥有主仓库,在另一台Windows机器上拥有克隆。 在我的更新挂钩中,我添加了 ipconfig 来打印IP地址。 我原本希望看到主人的IP地址,但它实际上是打印出来的。

这让我觉得服务器端git hooks (预接收,更新和后接收)实际上是在实际推送的客户端/克隆机器上本地下载和运行的。< / p>

如果这是正确的,那么如果对钩子应该如何写入有很多限制。例如用perl编写的钩子需要所有客户端都有perl来在本地执行这个钩子。

有人可以确认这是否是这种行为?

3 个答案:

答案 0 :(得分:1)

他们在服务器上运行。否则编写脚本会非常不方便(它们必须在所有操作系统上运行等)。

你说

  

我在Windows机器上拥有主仓库,在另一台Windows机器上拥有克隆。在我的更新钩子里面,我添加了ipconfig来打印IP地址。我期待看到主人的IP地址,但它实际上打印出克隆的。

请你详细说明。有了这个IP地址,你做了什么?你是如何使用这两个存储库的?

编辑: A reference

答案 1 :(得分:1)

看起来我们可以找到原因。 我曾使用file://协议来创建克隆。当我的同事尝试使用SSH时,服务器IP按预期打印出来。

答案 2 :(得分:1)

超级用户上有一篇文章讨论When I run a Git hook in a repo on a network share which binaries are used

“如果它是常规(SMB / CIFS)网络共享,则会在客户端上执行。

如果您通过SSH或HTTPS使用Git,Git(可能是替代实现)正在远程端运行并执行挂钩。

更简化:如果您将文件路径设置为远程,则它在本地执行,即使它实际上是SSHFS或诸如此类的东西。否则,它是远程执行的。“