【问题标题】:How to use git pull to pull data using php exec如何使用 git pull 使用 php exec 拉取数据
【发布时间】:2020-08-14 12:28:30
【问题描述】:

我试图拉取的代码是

shell_exec('git init');
$d = shell_exec('git fetch origin master');
$output = shell_exec('git pull origin master');

但它没有按预期工作。有时有效,有时无效。

我在我的 git 帐户中启用了双重身份验证。你觉得是什么原因?

还是需要做其他事情来提取数据?

【问题讨论】:

  • 你初始化空的 git repo 并尝试从“无”中获取和拉取。你克隆了 repo,你有 refs 到 origin 吗?
  • 还可以尝试一些已经解决了很多问题的库。例如。 github.com/czproject/git-php
  • @Justinas:不,我只是这样做
  • @Justinas:我试过这个库,但我不知道如何将它用于现有的仓库
  • 请再次阅读:您没有设置远程存储库。你的 git 不知道从哪里拉主人

标签: php git ssh


【解决方案1】:

这应该可以工作,使用czproject/git-php,以及它的pull function

$repo = GitRepository::init('gitrepo');
$repo->pull('https://url/remote/repo', array('master')); 

这样,您可以明确指定远程 URL。

【讨论】:

  • 我也试过这个。不工作!它我使用克隆,它给出了错误
  • 它没有给出任何错误,它没有提取数据
  • @BhumiShah 奇怪,它对我有用。另见packagist.org/packages/czproject/…
【解决方案2】:

使用system() 代替shell_exec

你也可以做一个

$escaped_cmd = escapeshellcmd($command);
system($escaped_cmd);

如果你是偏执狂

【讨论】:

    【解决方案3】:

    您编写的代码在当前工作目录中创建一个新存储库,然后尝试从origin 远程获取/拉取,但尚未配置任何内容。

    您需要添加类似于shell_exec("git remote add origin GIT_URL"); 的内容,其中GIT_URL 是您的存储库远程网址


    您也没有进行任何错误检查,可以尝试使用 exec systemproc_* 来检测故障并在需要时中止

    【讨论】:

    • 另外,如果您的仓库需要身份验证,您还需要提供证书或登录名。
    • 也许他已经过身份验证,但 OP 没有具体说明。
    • 这就是处理错误有用的地方,他会看到是什么导致了问题。很难列举他想要的所有可能的解决方案所有可能的功能:)
    【解决方案4】:

    您应该在开始 fetch 之前拥有 origin(远程存储库)。在本地机器上的存储库初始化后,您错过了 git remote add origin URL 命令。此外,如果您在本地处理中创建了新的空存储库,则需要先克隆现有的远程存储库。这是从远程服务器克隆存储库的方法。

    $repo = 'YOUR_REPOSITORY_URL_HERE';
    shell_exec('git clone '.$repo);
    shell_exec('git remote add origin '.$repo);
    $d = shell_exec('git fetch origin master');
    $output = shell_exec('git pull origin master');
    

    确保存储库不是私有的,否则您需要 ssh 来连接远程服务器。

    我建议你不要重新发明轮子,你可以使用git-php库让代码变得无忧。

    【讨论】:

      【解决方案5】:

      我不想表现得像在拖钓,但是: 第一:学习 git 的工作流程——你需要克隆你的存储库,然后是 checkout master,然后是 git pull。如果你已经这样做了 - 你不能再使用“git clone”,只需要检查 master 并执行 git pull。 第二:您需要将您的 ssh 密钥设置为 PHP - 我不会那样做,但那是您的事。使用 2 因素身份验证与您尝试解决的问题无关。 只需使用 Github 中的 SSH URL 克隆您的存储库,并确保 PHP 可以访问您的 SSH 密钥,以便它可以向 github 进行身份验证。

      【讨论】:

        猜你喜欢
        • 2011-12-28
        • 2012-05-28
        • 2014-11-29
        • 2021-01-30
        • 2014-06-01
        • 2014-08-31
        • 2018-01-11
        • 1970-01-01
        • 2023-03-19
        相关资源
        最近更新 更多