2012-10-02 45 views
0

我试图创建一个git commit,并在每次我的客户端更新其Wordpress插件或核心时将其推送到远程repo。我已经成功地吸引了正确的过滤器,所以一旦更新完成,我就可以执行php代码,甚至可以创建一个提交,但我没有运气推送到远程。如何通过PHP执行“git push”?

我使用下面的代码:

system ('cd '.ABSPATH.'; git add -A;'); 
system ('cd '.ABSPATH.'; git commit -a -m "Updated plugins via WP";'); 
system ('cd '.ABSPATH.'; echo `git push`;'); 

第2行工作的伟大!它们也产生输出。但是,第三行不起作用。没有产出。当我检查我的回购时,更改没有推到远程。当我通过terminal/shell手动执行git push时,它会成功推送并产生输出。

我必须错过一些明显的东西?

+1

根据你的说法,与第一行和第二行有什么不同? –

+1

您是否故意在反引号内进行推送?你尝试调用'system('cd'.ABSPATH。'; git push;');' – Mark

回答

0

如果你想看到的输出,你必须使用回声“系统()”它

echo system ('cd '.ABSPATH.'; echo `git push`;'); 
+0

试过,没有做任何事情 – ragulka

1

不太确定是否是一个好主意。 但是存在PHP SSH2支持,对如何使用SSH2和PHP的服务器进行交互的伟大的教程可以在这里找到:

http://kevin.vanzonneveld.net/techblog/article/make_ssh_connections_with_php/

(它甚至还介绍了如何安装了SSH2库,如果你还没有它已经安装)

你也可以尝试一些中间'回声'通过系统命令只是为了看看它是否仍然生产输出。

1

个人而言,我会编写一个简单的bash脚本来执行批处理git操作,并使用proc_open而不是使用system来执行该操作。获取脚本输出以及检查错误并退出代码更好。

http://php.net/manual/en/function.proc-open.php

1

https://github.com/kbjr/Git.php

您可以尝试使用Git.php运行Git命令。虽然它没有一个push功能,您可以使用run功能是这样的:

$repo = Git::open(ABSPATH); 
$repo->add('-A'); 
$repo->commit('Updated plugins via WP'); 
$repo->run('push'); 
0

如果去除回声和最后一行的反引号,你会得到你最有可能也将使用代码您自己:

system ('cd '.ABSPATH.'; git push ;'); 

请注意,如果您的服务器未在HEAD上运行,则推送将失败。您可能需要指定一个分行名称,并在push之前需要pull。 (我会用pull - commit - push。)