【发布时间】: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 log或git 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