3

我有一个 GIT 存储库,我正在使用 PHP 脚本从主分支中提取并更新服务器上的文件。这是一个非常简单的解决方案,只是为了测试它。我想在 github 上添加一个 webhook 以在成功推送后发送回调,以便我可以从这个 repo 中提取。

脚本双向运行

  • 从命令行
  • 来自 HTTP 请求

不同之处在于,当我从 HTTP 运行它时,它不会拉取新的更改,只是显示它是最新的并且即使我 100% 确定 repo 中有新的更改也不做任何事情。输出来自 GIT 命令,所以我确信它可以工作,并且 apache 具有运行该脚本文件和其中使用的命令的适当权限。

当我通过命令行(通过相同的脚本或只是清理 git 命令)运行它时,一切都很好,脚本会提取新的更改并显示标准的 GIT 输出。

PHP代码:

echo "Pulling changes from master branch...\n";
$result = shell_exec('cd /var/git-test && git reset --hard HEAD && git pull');
if($result !== null){
  echo $result;
}else{
  echo $result;
  echo "Error in Git pull comand";
}

我该如何解决?

4

1 回答 1

1

sudo -u www-data php deploy.php显示 www-data 用户没有在 github 上注册 ssh 密钥并且无法执行拉取。我无法切换到 www-data 用户,所以我生成了他的密钥,而无需像运行脚本那样切换到它sudo -u www-data ssh-keygen -t rsa。在 github 上注册他的密钥后,它就像一个魅力。

还有专业提示!shell_exec() 不显示当我在命令行中以另一个用户身份运行脚本时可见的所有输出。这真的很令人困惑,我花了很多时间来弄清楚错误在哪里。

于 2015-10-08T07:29:47.487 回答