使用PHP代码自动化执行git pull操作

16
我正在努力自动化从Bit-bucket服务器到我的Godaddy共享托管的'git pull'任务。我已经在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


使用git本身的push有什么问题吗? - Dave
1
需要我通过ssh登录服务器,然后从那里进行git pull。在godaddy服务器上从bitbucket更新小代码需要输入密码两次并等待很长时间。我想使用PHP脚本自动化此部分,以便没有人可以看到我的密码。我有许多开发人员在单个应用程序上工作。 - Abhishek Sachan
请注意以下解决方法,可能对您有用:https://dev59.com/y2kw5IYBdhLWcg3wUI7x#67889529 - DrBeco
1个回答

34
如果您使用 https 而不是 ssh,您可以在请求中直接指定用户名/密码: git clone:
exec("git clone https://user:password@bitbucket.org/user/repo.git");

拉取git仓库最新代码:

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

替代暴露密码的方法:

  • 在目标系统上使用无密码 SSH 密钥。
  • 为 HTTPS 使用客户端证书。

更新: 如果您需要获取 exec 命令的输出以进行调试或验证,可以将其传递一个数组参数,然后使用标准迭代技术将其输出到所选位置。以下是一个简单打印输出的示例:

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

由于exec()将向数组$result添加而不是覆盖它,因此您可以使用单个数组来记录执行命令的结果。


谢谢回复,命令行中可以工作,但在PHP中没有输出。我查看了https://dev59.com/52oy5IYBdhLWcg3wa9bf,但我是Windows用户,所以无法理解他们的解决方案是如何工作的!如果您知道,请帮忙! - Abhishek Sachan
此外,exec 函数可以使用数组作为可选的第二个参数进行调用 - 该数组接收逐行输出的内容,然后您可以使用循环和 print 或其他方式来显示它。将此作为更新添加。 - sfyn
感谢提供详细信息。Godaddy共享主机限制了通过exec()执行git命令的操作,虽然我可以运行whoami、ls等命令,但是对于git命令却无法正常工作。在执行exec('git')时,没有任何输出或空白输出。 - Abhishek Sachan
似乎在Godaddy服务器上使用PHP无法实现这一点。我将尝试创建一个批处理文件来自动化此任务,因为我现在可以使用无密码拉取。 - Abhishek Sachan
2
你可以使用以下一行代码来实现:echo implode("\n", $result); - vladkras
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接