Git 服务器挂钩 - 它们是否在 client/clone 机器上本地执行?

Git Server Hooks - Are they executed locally on the client/clone machine?

设置:

我在 Windows 机器上有主存储库,在另一台 windows 机器上有一个克隆。 在我的 update 挂钩中,我添加了 ipconfig 来打印 IP 地址。 我期待看到主人的 IP 地址,但它实际上打印出克隆的 IP 地址。

这让我觉得服务器端 git 挂钩 (预接收、更新和 post-接收) 实际上已下载并且 运行 在正在执行实际推送的 client/clone 本地机器上。

如果这是正确的,那么 if 对 hook 的编写方式有很多限制。例如用 perl 编写的挂钩需要所有客户端都有 perl 才能在本地执行此挂钩。

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

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

你说

I have master repo on Windows machine and a clone on another windows machine. Inside my update hook, I have added ipconfig to print IP address. I was expecting to see the master's IP address, but it actually prints out clone's.

能否请您详细说明。当你得到这个IP地址时你做了什么?您是如何使用这两个存储库的?

编辑: A reference

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

超级用户中有一个 post 讨论 When I run a Git hook in a repo on a network share which binaries are used:

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

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

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