php exec() - git push origin master无法正常工作,但其他git命令正在运行

时间:2012-06-28 06:46:20

标签: php git

我使用下面的代码:

    echo exec("git add . ");  //this is working  
echo exec("git commit -am 'first commit' "); //also working  
echo exec("git push origin master");  //NOT WORKING, also not showing any error . 

我将用户的文件夹权限限制为www-data。所以,一些git命令正在运行,但是

GIT PUSH ORIGIN MASTER

无法使用php exec。解决办法是什么 ? 另外,请告诉我为什么在exec中PUSH没有显示任何错误或消息,我怎么能看到这些消息。 另外,如果可能的话,请给我任何好的链接,以便更高级地使用php exec中的git命令。

更新: 我也试过这个:我通过创建文件.git / hooks / post-commit

添加了post-commit钩子

我将此代码添加到其中:

git push origin master

但是我在提交后没有得到任何消息或错误,它只是提交但没有做任何推动。

谢谢!

2 个答案:

答案 0 :(得分:2)

我认为push命令会尝试推送到远程存储库(即系统上的另一个文件夹,而不是SSH / HTTPS后面的远程服务器)。

在这种情况下,您很可能缺少HTTPS客户端证书HTTPS或SSH密钥。您的Web服务器(以及PHP)最有可能以不同的用户身份运行,并且无法访问私钥。如果私钥需要密码,那么它将无法工作,因为exec命令不是交互式会话。

无论如何,我强烈建议你使用某种绑定而不是调用二进制文件。任何直接调用都将启动一个新进程,这对调用库来说效率更低。

答案 1 :(得分:0)

你检查过你所在的分店吗? 'git status'会告诉你。

我还建议在分支机构工作,而不是直接在主分支机构工作。

  

git branch dev_test

     

git checkout dev_test

     

git add。

     

git commit -a -m“first comment”

     

git push origin dev_test

     

git checkout master

     

git merge dev_test

     

git push origin master