gpt4 book ai didi

msysgit - 如何在 Apache 托管的 Windows 上的 msysgit 上执行接收后 Hook ?

转载 作者:行者123 更新时间:2023-12-01 02:30:30 27 4
gpt4 key购买 nike

我正在 Windows 主机上设置 Git 服务器。我已经安装了最新的 Apache,并让它与 msysGit 一起工作。我根本没有使用 SSH;我可以通过 HTTP 推送和拉取。

现在我想添加一个接收后 Hook 来通知我的构建服务器,但我不知道该怎么做。我在服务器的存储库中看到了示例 Hook 脚本,但我对在那里做什么感到困惑。我是否在其中放置了一个名为 post-receive.bat 的 Windows 批处理文件? ,还是做其他事情?

我对这一切所做的细节有点模糊,但是当 Apache 看到 Git URL 时,它正在执行 c:\Program Files\git\libexec\git-core\git-http-backend.exe。 git-http-backend.exe 会触发 post-receive 钩子(Hook)吗?

更新
我越来越近了。这是我的钩子(Hook),在 hooks/post-receive在我的 repo 中:

#!/c/Program Files/Git/bin/sh
curl http://mybuildserver:8080/job/Whazzup/build

我将 shebang 从 #!/bin/sh 更改为因为在 Windows 上我没有。现在在 Apache 错误日志中,我收到消息 error: cannot spawn hooks/post-receive: No such file or directory
顺便提一下,Git bash 的 chmod似乎不起作用。但是我获得了 post-receive的许可至 rwxr-xr-x通过重命名示例文件。

更新
我将 shebang 行改回 #!/bin/sh ,但我仍然在 Apache 错误日志中收到相同的错误: error: cannot spawn hooks/post-receive: No such file or directory .作为测试,我在 hooks 文件夹中打开了一个 Git bash 提示符,并使用 ./post-receive 执行了该钩子(Hook)。 ,并且成功了。

更新
现在我想知道我是否有其他问题。听从 VonC 的建议,我尝试在我自己的帐户下从命令行运行 Apache httpd,而不是作为 LocalSystem 下的服务。还是一样的。推拉工作正常,但钩子(Hook)不执行。然后我试着让 Apache 脱离这个等式。在与 repo 相同的计算机上,我从 Git bash 提示符进行了克隆(通过文件系统)、修改、提交和推送。但是钩子(Hook)仍然没有执行。

更新
好的,我的钩子(Hook)脚本中有一个愚蠢的问题,但现在至少当我从同一台计算机(通过文件系统)推送到 repo 时它会执行。但不是当我插入 Apache 时。 Apache 现在在一个普通帐户下运行,并且 Apache 帐户可以完全控制存储库。推送工作正常,但 post-receive Hook 不执行。

最佳答案

Apache is executing c:\Program Files\git\libexec\git-core\git-http-backend.exe when it sees a Git URL. Is git-http-backend.exe going to trigger the post-receive hook?



不,它会将命令( clonepushpull )传递给 git本身。
post-receive hook推送完成后执行,是一个bash(unix shell)脚本,如“ post-receive hook on Windows - GIT_WORK_DIR: no such file or directory”所示。

另请参阅“ git windows post pull”以查看可以在哪里创建 post-receive脚本(在你的 repo 的 .git/hooks 中):它与你在 repos 前面的 http Apache 服务无关。

关于错误信息“cannot spawn hooks/post-receive: No such file or directory”,可以引用“ msysgit error with hooks: "git error: cannot spawn .git/hooks/post-commit: No such file or directory"”:
  • shebang 必须是 #!/bin/sh
  • Apache 必须作为普通用户而不是本地系统运行,以便从为所述普通用户定义的环境变量中受益。
  • <path_to_git>\bin必须在 PATH
  • 关于msysgit - 如何在 Apache 托管的 Windows 上的 msysgit 上执行接收后 Hook ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13297100/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com