通过php通过http执行git命令

Kil*_*Bug 5 php git apache2 github git-pull

操作系统 - Ubuntu 14.04

我正在使用GIT webhooks进行部署.

我已将部署密钥添加到git repo,现在我想在git pull origin master从本地仓库发生推送时触发命令.

这是test.php我通过浏览器调用的文件:

<?php       
    //echo "THis is a test file on a test repo for testing the deploy functionality using github webhooks!!!!";
    echo exec('whoami');
    echo exec('sh -x /var/www/proj/test/git.sh');
?>
Run Code Online (Sandbox Code Playgroud)

这是git.shshell文件:

#!/bin/bash
cd /var/www/proj-dir/test
git pull origin master
Run Code Online (Sandbox Code Playgroud)

当我在终端上运行它时, php test.php我得到了正常的结果:

 ubuntu From github.com:repo/test
 * branch            master     -> FETCH_HEAD
 Already up-to-date.
Run Code Online (Sandbox Code Playgroud)

ubuntu用于whoami随后git pull输出.

现在这是我http://example.com/test.php通过浏览器调用相同的问题,它显示用户或whoami输出为www-data,这是apache用户,但我尝试更新php文件的权限来执行和更改用户www-data但没有工作.
检查了apache日志,当我通过浏览器执行时,我收到了权限错误

  Please make sure you have the correct access rights and the repository exists. + cd /var/www/proj/deploy-test + git pull origin master 
Run Code Online (Sandbox Code Playgroud)

主机密钥验证失败.致命:无法从远程存储库读取.请确保您具有正确的访问权限并且存储库存在.

我需要做什么更新,以便文件通过浏览器请求工作?

如果我需要更新sudoers文件应该更新什么?

更新
我添加了dir 的.ssh键,var/www/因为这是apache用户的主页.但我仍然得到了

git pull origin master
error: cannot open .git/FETCH_HEAD: Permission denied
Run Code Online (Sandbox Code Playgroud)

另外,我为www-data用户添加了一行,以便能够执行sh文件.

 www-data ALL=(anthony) NOPASSWD: /var/www/mysite/vendor/tmd/auto-git-pull/scripts/git-pull.sh
Run Code Online (Sandbox Code Playgroud)

此处参考仍然没有运气
将.git文件夹的权限更新为www-data用户

sudo chown www-data:www-data /var/www/proj/test/.git

Pau*_*wen 1

这似乎不是 PHP 问题,而是 git config 问题。ubuntuGit 已针对 user而不是针对 user正确配置www-data

您可以尝试让 PHP 在 ubuntu 上运行,但这似乎不是最简单的,也不是正确的。我建议为www-data用户正确配置 git。

我怀疑您可以通过在终端上运行来重现该问题:

# become www-data user
sudo su www-data
# actions from your git.sh file
cd /var/www/proj-dir/test
git pull origin master
Run Code Online (Sandbox Code Playgroud)

验证您确实有重现场景后,您可以尝试为用户解决问题www-data

git config --list以任一用户身份运行时的输出可能会有所不同。有关该分数的更多帮助,请参阅https://git-scm.com/book/en/Getting-Started-First-Time-Git-Setup

也可能是文件权限/所有权差异导致了问题。为了排除这种可能性,我建议您使用git clone ...as 用户www-data在文件系统的其他路径中创建新的克隆和工作副本。然后再次查看git pull现在是否按预期工作。

无论如何,您可以考虑提供www-data自己的工作副本(无论权限问题)。这还可以防止必须处理工作副本中可能导致合并问题的未提交更改。从 PHP 自动/无人值守/处理这些git.sh可能很麻烦。

建议的工作流程将是:在ubuntu您当前的工作目录和add//您的更改中进行开发。然后让 PHP 执行as 本身 (as )。commitpushpullwww-data