我的工作流程很简单:
- 当地的:
mkdir testrepo && git init && git add . && git commit -m 'commit X' && git push -u origin master
很好,我在 github 上的 repo 得到了更新。
- 开发服务器:
git clone github_repo_url
我已经设置了一个帖子接收挂钩,如此处所述。
当我从本地推送更改时,存储库会更新,但我在服务器端的脚本<?php git pull
不起作用。如果我 ssh 服务器并使用 执行它php github.php
,脚本确实会执行 agit pull
并且服务器上的文件正在更新。
我也试过<?php $output = shell_exec('git pull'); echo $output;
,但同样的事情。我推送,repo 得到更新,即使 post-receive 钩子设置正确,开发服务器也不会拉取(我可以通过 RequestBin 看到)。
github.php - 755 权限。所有者不是 root,但如果我这样做,chown username:group github.php
我会收到 500 错误。
如果/当我运行脚本时,它不要求输入密码,没有可以停止脚本的对话框。我只是不明白。
在git pull
以 root 身份手动登录,而在该目录中的 ssh 上:
git pull
remote: Counting objects: 5, done.
remote: Compressing objects: 100% (2/2), done.
remote: Total 3 (delta 0), reused 3 (delta 0)
Unpacking objects: 100% (3/3), done.
From github.com:test/testrepo
0e678d9..88b3237 master -> origin/master
Updating 0e678d9..88b3237
Fast-forward
test.html | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)
root@echo [/home/username/public_html/dev/testrepo]#
并完成了工作。我的文件已更新。
请问有什么想法吗?
难道是apache不能自己运行php脚本?此外,如果我 ssh 进入服务器但不是使用 root,并且我尝试运行 php 脚本,我会得到一个 Permission denied (publickey)。致命:远端意外挂断