1

每次我的客户更新他们的 Wordpress 插件或核心时,我都会尝试创建一个 git 提交并将其推送到远程仓库。我已成功连接到正确的过滤器,因此我可以在更新完成后执行 php 代码,我什至可以创建一个提交,但我没有运气推送到远程。

我正在使用以下代码:

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

前 2 行效果很好!它们也产生输出。但是,第 3 行不起作用。并且没有产出。当我检查我的仓库时,更改尚未推送到远程。当我git push通过终端/外壳手动执行时,它会成功推送并产生输出。

我一定遗漏了一些明显的东西吗?

4

5 回答 5

2

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');
于 2012-10-03T04:22:46.420 回答
1

不太确定使用“system()”是否是个好主意。但是 PHP 中支持 SSH2,关于如何使用 SSH2 和 PHP 与服务器交互的很棒的教程可以在这里找到:

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

(如果您还没有安装它,它甚至包括安装 ssh2 库)

您也可以通过系统命令尝试一些中间“回声”,看看它是否仍在产生输出。

于 2012-10-02T10:02:37.130 回答
1

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

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

于 2012-10-02T10:09:36.577 回答
0

如果你想看到输出,你必须回显它

echo system ( 'cd '.ABSPATH.'; echo `git push`;' );
于 2012-10-02T10:01:36.100 回答
0

如果您从最后一行中删除回声和反引号,您将获得您最有可能自己使用的代码:

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

请注意,如果您的服务器未在HEAD. 您可能需要指定一个分支名称并且需要pullpush. (我会使用拉 - 提交 - 推。)

于 2012-10-03T04:36:44.833 回答