【问题标题】:GitHub post-hook doesn't work with our PHP scriptGitHub post-hook 不适用于我们的 PHP 脚本
【发布时间】:2012-04-01 21:46:09
【问题描述】:

我们有一个 PHP 脚本,它只包含以下代码...

/usr/bin/git pull

...我们最初只使用git pull

每当 GitHub 向此脚本发布数据时,git pull 都会失败。我们已经尝试使用http://us2.php.net/manual/en/function.shell-exec.php 并将响应存储在一个变量中,并将该变量的内容写入一个文本文件,这样我们就可以确保命令正在执行——它们确实是!例如,我们可以执行git log,文本文件将包含 git 日志响应的所有内容。但是执行git pull 就不管用了吗?

我们的服务器工程师建议使用 git install 的完整路径(使用 which git 查找路径),这就是您在上面看到的,但这也不起作用。

我们很困惑,为什么当 GitHub 的 post-hook 调用我们的脚本时,我们可以执行诸如 git log 之类的 git 命令,而 git pull 却不起作用?

有没有人知道为什么这不起作用?

谢谢。

【问题讨论】:

  • 你能把整个脚本贴出来吗?
  • @starlocke “解决方案必须是雇佣新的服务器工程师,对吧?”是的,那会很好:-)
  • @WaynnLue 整个脚本? php 脚本实际上只是 /usr/bin/git pull 即整个脚本(因为该命令包含在反引号中,PHP 将该行视为 shell 命令而不是 PHP 代码)。因此,我们使用 PHP 来触发 shell 命令,并且 PHP 脚本由 GitHub 触发器调用(当我们将更改推送到 GitHub 时会发生这种情况)。我们发现我们可以执行git log & git status 但不能执行git pull 或类似git fetch 的命令。我认为某处一定存在 PHP 权限问题,但为什么允许 git loggit status 而不是 git pull
  • 我不明白为什么... (a) 这是一个挂钩后问题 [究竟是哪个挂钩?] (b) 这是一个 php 问题而不是 bash 脚本问题 [钩子脚本通常是 bash 脚本] (c) 为什么你的 php 脚本如此不完整[“
  • 在我的例子中,处理 php GET/POST 的 apache 用户没有基于 git pull 创建/修改文件的权限。我从其他人那里看到的解决方案是使用 php 基于该 GET/POST 创建一个标志文件,然后使用单独的 shell 脚本/cron 检查该标志,然后启动拉取。

标签: php git github git-pull remote-server


【解决方案1】:

确保以具有足够权限的用户身份执行代码。您可以通过在尝试使用 git 拉取的脚本中运行 whoami 来确认这一点

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-04-21
    • 2015-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-09
    • 1970-01-01
    相关资源
    最近更新 更多