php-git2 is a PHP bindings to the libgit2 linkable C Git library. this extension are re-writing php-git as that code too dirty.
php-git changed it's API drastically. this changes doesn't care about compatibility between old one. please check tests cases.
you need to install libgit2 before make php-git.
git clone https://github.com/libgit2/libgit2.git cd libgit2 mkdir build cd build cmake .. cmake --build sudo cmake --build . --target install git clone https://github.com/libgit2/php-git.git cd php-git phpize ./configure make make test sudo make install new php-git features almost tested.
$repo = newGit2\Repository($path); /* bool = $repo->isExist(string sha1) Git2\Object = $repo->read(string sha1) string sha1 = $repo->hash(string content, long type) string sha1 = $repo->write(string content, long type) bool = $repo->isBare() bool = $repo->isEmpty() bool = $repo->headDetached() bool = $repo->headOrphan() string path = Git2\Repository::discover("/Users/chobie/projects/work/repo/lib/subdir"); // => /Users/chobie/projects/work/repo/.git Git2\Repository = Git2\Repository::init(string $path, bool isBare)*/$oid = Git2\Blob::create($repo, "Hello World"); /* $blob = $repo->lookup($oid); int $blob->getSize(); string $blob->getContent(); */ $repo = new Git2\Repository($path); $tree = $repo->lookup(tree sha); // specify tree sha foreach ($tree as $oid => $entry){/* bool $entry->isTree(); bool $entry->isBlob(); bool $entry->isSubmodule(); */ var_dump($entry)} $ref = Git2\Reference::lookup($repo, "refs/heads/master"); sha = $ref->getTarget(); str = $ref->getName(); foreach (Git2\Reference::each($repo) as $ref){echo $ref->getName() . PHP_EOL} <?php date_default_timezone_set('Asia/Tokyo'); $repo = Git2\Repository::init("/path/to/repo",true); $author = new Git2\Signature("Shuhei Tanuma","[email protected]",new DateTime()); $bld = new Git2\TreeBuilder(); $bld->insert(new Git2\TreeEntry(array( "name" => "README.txt", "oid" => "63542fbea05732b78711479a31557bd1b0aa2116", "attributes" => octdec('100644'), ))); $tree = $bld->write($repo); $parent = ""; $parents = array(); $parent = Git2\Commit::create($repo, array( "author" => $author, "committer" => $author, "message" => "Hello World", "tree" => $tree, "parents" => $parents, )); $repo = new Git2\Repository($path); $walker = new Git2\Walker($repo); /* specify HEAD oid */ $walker->push("6e20138dc38f9f626107f1cd3ef0f9838c43defe"); foreach ($walker as $oid => $commit){printf("oid: %s\n", $oid); printf("message: %s\n", $commit->getMessage())} $config = new Git2\Config("path/to/git/config"); $config->get("core.bare"); $config->store("core.bare","1"); // Git2\Config supports read / write dimension. $config['core.bare'] $config['core.bare'] = 1; $repo = Git2\Repository::init("/path/to/repo",true); $odb = $repo->odb // read only property Git\OdbObject $odb->read(sha1) // returns uncompressed git raw data. string $odb->hash(string contents, int type)// same as Git2\Repository::hash string $odb->write(string contents, int type)// same as Git2\Repository::write bool $odb->exists(sha1)// same as Git2\Repository::exists will be add.
this API will be change.
$repo = new Git2\Repository("/path/to/.git"); $remote = new Git2\Remote($repo,"http://github.com/libgit2/php-git.git"); // for now, remote can fetch files only. that does not update references. $remote->fetch(); - Shuhei Tanuma
- Anthony Van de Gejuchte
- Cameron Eagans
- Graham Weldon
- James Titcumb
- Ryusuke SEKIYAMA
- Shuhei Tanuma
MIT License