使用PHP代码自动化git pull

时间:2014-04-17 14:32:33

标签: php git bitbucket

我正在努力将'git pull'的任务从bit-bucket服务器自动执行到我的godaddy共享主机。我已经在Godaddy服务器上安装了Git,能够从命令行远程'git clone''git pull'等。但现在我想写一个PHP代码直接从浏览器运行'git pull'。

PHP函数 exec()可用于此,但来自bit-bucket的git pull需要密码。我在网上搜索了很多但是找不到如何从PHP代码提供密码。

注意:我已尝试在2台服务器(Godaddy - Bitbucket)之间设置无密码身份验证,但它无效。所以我只留下以上方法。

编辑:我已完成设置,现在只需点击一下即可更新godaddy服务器。但是,由于对Godaddy的服务器的限制,PHP代码部分对我不起作用。所以我创建了一个批处理脚本,对服务器和自动git pull命令进行无密码验证。以下是执行此操作的步骤(可能对任何有类似问题的人有帮助):http://abhisheksachan.blogspot.in/2014/04/setting-up-godaddy-shared-hosting-with.html

1 个答案:

答案 0 :(得分:17)

如果您使用https而不是ssh,则可以直接在请求中指定用户/密码:

git clone:

exec("git clone https://user:password@bitbucket.org/user/repo.git");

git pull:

exec("git pull https://user:password@bitbucket.org/user/repo.git master");

公开密码的替代方法:

  • 在目标系统上使用无密码的ssh密钥。
  • 将客户端证书用于https。

更新:如果你需要获取exec命令输出来调试或验证,你可以传递一个数组参数,然后使用标准迭代技术输出到你选择的位置。这是一个简单打印输出的例子:

function execPrint($command) {
    $result = array();
    exec($command, $result);
    foreach ($result as $line) {
        print($line . "\n");
    }
}
// Print the exec output inside of a pre element
print("<pre>" . execPrint("git pull https://user:password@bitbucket.org/user/repo.git master") . "</pre>");

由于$result数组将附加到exec(),而不是被{{1}}覆盖,因此您还可以使用单个数组来保存exec命令结果的运行日志。