0

我的工作流程很简单:

  1. 当地的:

mkdir testrepo && git init && git add . && git commit -m 'commit X' && git push -u origin master

很好,我在 github 上的 repo 得到了更新。

  1. 开发服务器:

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)。致命:远端意外挂断

4

2 回答 2

4

您可能会尝试的另一件事是通过 https 输入您的用户名和密码,如下所示

https://username:password@github.com/user/reponame.git

这样你就不必真正进入 SSH。这是你从远程 repo 服务器拉取的时候。添加遥控器时,请确保添加这些参数。

否则,在您的服务器上创建一个 ssh 密钥并将其与 GitHub 链接作为部署密钥。确保在创建 ssh 密钥时没有输入密码。否则,您将遇到与现在相同的问题,因为它没有通过身份验证阶段。

于 2012-11-19T21:39:49.067 回答
3

这是因为当您不执行“git pull”时,必须输入密码。当您登录(ssh)时,我认为您无需密码即可访问。见这个链接:http ://wiki.mediatemple.net/w/(gs):GitHub

这个链接指导:http ://seancoates.com/blogs/deploy-on-push-from-github

于 2012-11-19T20:17:08.920 回答