使用PHP无法正常对Web服务器上的'commit'更改为Github repo?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (1)
  • 关注 (0)
  • 查看 (37)

我正在尝试编写一个PHP脚本,可以在我的Web服务器上发现对本地git仓库的所有更改,并将它们推送到我的(私有)Github仓库。使用Atom从Github仓库中推送和拉出工作完美,使用webhook将更改推送到Web服务器工作完美,通过命令行在Web服务器上推送和拉取更新工作完美,我的问题是尝试提交并推送更新使用PHP的Web服务器到我的Github repo。你怎么做到这一点?

如果我必须手动更改,添加甚至删除服务器上的整个模板,我可以提交这些更改并使用命令行将它们推送到Github,这样没问题:

git add --all
git commit -m "from server"
git push -u origin master

但是,当我尝试使用PHP脚本执行此操作时,它永远不会工作,我没有收到任何错误消息(我甚至尝试暂停):

$output = `git add --all`;
echo $output;
sleep(1);

$output = `git commit -m "from server"`;
echo $output;
sleep(3);

$output = `git push -u origin master`;
echo $output;
sleep(3);

如果我运行一些简单的东西,比如' git --version ',' git config --list '或' git status ',它可以很好地从这些脚本中运行,所以我很茫然。

提问于
用户回答回答于

当您使用php运行脚本时,它由用户www-data(默认情况下)运行。当您连接到git存储库时,您需要进行身份验证。很可能它将使用ssh密钥完成。因此,您需要使用ssh密钥授权用户www-data以允许他访问远程存储库。

所以步骤。

  1. 生成密钥
  2. 将密钥添加到远程存储库
  3. 在本地为用户www-data添加密钥到ssh代理
  4. 检查运行命令的环境
  5. 请享用

有用的链接:https//help.github.com/articles/generating-a-new-ssh-key-and-adding-it-to-the-ssh-agent/

还可以选择通过https使用身份验证并跳过放置凭据。你可以在这里看到更多

此外,有图书馆可以做这些事情,你也可以检查它

扫码关注云+社区

领取腾讯云代金券