9

我需要在纯 PHP 中进行 git checkout。我已经用 HTTP 和 SASL 尝试过这个(http://www.phpclasses.org/package/5310-PHP-Retrieve-project-files-from-GIT-repositories.html),但我并没有真正工作。然后我看了一下 GLIP(https://github.com/patrikf/glip),但它似乎没有这样的功能。基本上我需要

- 复制/克隆远程 git 存储库

-“提取”主分支文件到指定目录

PHP GIT 的主要问题是,它只是不支持您可以在提交中进行的所有可能更改。只有新文件,没有文件移动。而且它也无法提取文件。

/edit: 未安装 git,我也无法安装 git

4

3 回答 3

4

你可以试试

Git Streamwrapper for PHP 是一个 PHP 库,它允许 PHP 代码与应用程序中的一个或多个 Git 存储库进行交互。该库由可用于以编程方式访问 Git 存储库的 Git 存储库抽象和可连接到 PHP 流基础架构的流包装器组成,以允许开发人员直接在 Git 存储库中的文件上使用文件和目录访问功能。该库提供了访问 Git 存储库上状态信息的方法,例如日志、当前存储库状态或提交信息。

它需要在机器上安装 Git,并且在撰写本文时处于测试阶段。

于 2011-08-17T18:08:30.923 回答
3

我开发了一个非常好的 PHP 库来操作 git 存储库,你应该考虑一下:https ://github.com/gitonomy/gitlib

看起来像这样:

$repository = new Gitonomy\Git\Repository('/path/to/repository');
$master     = $repository->getReferences()->getBranch('master');

$author = $master->getCommit()->getAuthorName();

echo "Last modification on master made by ".$author;
于 2013-01-15T13:57:38.977 回答
-3
<?php
  /**
   * This function handles the pull / init / clone of a git repo
   *
   * @param $git_url 
   *  Example of git clone url git://github.com/someuser/somerepo.git
   *
   * @return bool true 
   */
  public static function pullOrCloneRepo($git_url) {
    if (!isset($git_url)) {
      return false;
    }
    // validate contains git://github.com/
    if (strpos($git_url, 'git://github.com/') !== FALSE) {
      // create a directory and change permissions 
      $uri = 'public://somedir'; // change this if not in drupal 
      //check the dir
      $file_path = drupal_realpath($uri);  // change this if not in drupal 
      if (isset($file_path)) {
        $first_dir =  getcwd();
        // change dir to the new path
        $new_dir = chdir($file_path);
        // Git init
        $git_init = shell_exec('git init');
        // Git clone
        $git_clone = shell_exec('git clone '. $git_url);
        // Git pull
        $git_pull = shell_exec('git pull');
        // change dir back
        $change_dir_back = chdir($first_dir);
        return true;
      }
    }
    else {
      return false;
    }
  }
?>
于 2015-07-03T03:41:33.257 回答