通过php在http上执行git命令

通过php在http上执行git命令,php,git,github,apache2,git-pull,Php,Git,Github,Apache2,Git Pull,操作系统-Ubuntu 14.04 我正在使用GIT webhooks进行部署 我已经将部署键添加到git repo,现在我想在本地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!!!!

操作系统-Ubuntu 14.04

我正在使用GIT webhooks进行部署

我已经将部署键添加到git repo,现在我想在本地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');
?>
当我在终端上使用
php test.php
运行此操作时,我得到了预期的正确结果:

 ubuntu From github.com:repo/test
 * branch            master     -> FETCH_HEAD
 Already up-to-date.
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 
主机密钥验证失败。致命:无法从远程存储库读取。请确保您具有正确的访问权限,并且存储库存在

我需要进行哪些更新才能使文件通过浏览器请求工作?

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

更新
我将
.ssh
键添加到
var/www/
dir,因为这是apache用户的主页。但我还是得到了答案

git pull origin master
error: cannot open .git/FETCH_HEAD: Permission denied
此外,我还为www数据用户添加了一行代码,以便能够执行sh文件

 www-data ALL=(anthony) NOPASSWD: /var/www/mysite/vendor/tmd/auto-git-pull/scripts/git-pull.sh
参考仍然没有运气
已将.git文件夹的权限更新为www数据用户

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

这似乎不是PHP问题,而是git配置问题。Git是为用户
ubuntu
正确配置的,而不是为用户
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
在确认确实存在复制场景后,您可以尝试修复
www-data
用户的问题

当以任何一个用户的身份运行时,
git config--list
的输出可能存在差异。有关这方面的更多帮助,请参阅

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

你可以考虑给<代码> www数据< /代码>它自己的工作拷贝(不管权限问题)。这还可以避免处理工作副本中可能导致合并问题的未提交更改。从PHP/

git.sh
自动/无人值守地处理这些可能会很麻烦


然后,建议的工作流程是:在当前工作目录中开发为
ubuntu
,并
add
/
commit
/
推送您的更改。然后让PHP按自己的方式(如
www-data
)执行
pull操作。

您需要确保请求pull的用户是正确的。哪位用户拥有回购的拉权?似乎你需要成为ubuntu.yes
ubuntu
,但我相信当通过
http
访问时,身为
www data
的apache用户需要拥有执行脚本的权限。在阅读了许多文章后,我了解到我可能需要更新sudoers文件,以便www data拥有正确的权限。如果我的方向错误,请更正。您是否可以修改脚本,使group/other具有执行权限。您的脚本似乎正在执行。尝试了一下,我将用户切换到php和shell文件的
www-data
,但没有成功!我得到www数据`是因为浏览器上的whoami,用户试图运行的menas是www数据,对吗?否则我可能会犯错误assumptions@nicoX我让它工作,但我不确定涉及的安全问题。我必须将
.git
文件夹的权限更改为
www-data:www-data
。这很好,但是我尝试在shell文件中添加
sudoubuntu
,但是它给了我
sudo:no-tty-present和no-askpass-program-specified
。我会要求添加一个答案的解决方案,这样我可以给你几点,并关闭线程。
# become www-data user
sudo su www-data
# actions from your git.sh file
cd /var/www/proj-dir/test
git pull origin master