pvpender / git-kphp

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Git-KPHP

Total Downloads PHP Version Require

FFI Library for work with Git repository in KPHP.

Download a latest package or use Composer:

composer require pvpender/git-kphp

Library requires PHP 7.4, the latest version of KPHP and git client (path to Git must be in system variable PATH). Also, if you want use commands, which requires to log in git, you should tune authentication without password using private/public keys or setting -global parameter.

Warning! This is FFI lib. That's mean that some C cod using to normal working. Before proc_open will not support, this library use FFI, that can be very unsafe. Don't use this library if safety is very important to you.

Before starting

This is FFI lib, and it means that you should preload .c files before starting working the library. Don't worry everything already in Systemc class, you only should write:

use pvpender\GitKphp\Systemc;
Systemc::load();

At the top of your main.php file.

Using

use pvpender\GitKphp\Git;
use pvpender\GitKphp\Systemc;

Systemc::load();
$git = new pvpender\GitKphp\Git;
// create repo object
$repo = $git->open(__DIR__);

// or you can just clone repo
// $repo = $git->cloneRepository('https://github.com/user/repo');

// create a new file in repo
$filename = $repo->getRepositoryPath() . '/newfile.txt';
file_put_contents($filename, "Hello world!");

// commit
$repo->addFile($filename);
$repo->commit('init commit');

Initialization of empty repository

$repo = $git->init('/path/to/repo-directory');

With parameters:

$repo = $git->init('/path/to/repo-directory', [
	'--bare', // creates bare repo
]);

Cloning of repository

// Cloning of repository into subdirectory 'git-kphp' in current working directory
$repo = $git->cloneRepository('https://github.com/pvpender/git-kphp.git');
// Cloning of repository into own directory
$repo = $git->cloneRepository('https://github.com/pvpender/git-kphp.git', '/path/to/my/subdir');

Basic operations

$repo->commit('commit message');
$repo->merge('branch-name');
$repo->checkout('master');
$repo->getRepositoryPath();
// adds files into commit
$repo->addFile('file.txt');
$repo->addFile('file1.txt', 'file2.txt');
$repo->addFile(['file3.txt', 'file4.txt']);
// renames files in repository
$repo->renameFile('old.txt', 'new.txt');
$repo->renameFile([
    'old1.txt' => 'new1.txt',
    'old2.txt' => 'new2.txt',
]);
// removes files from repository
$repo->removeFile('file.txt');
$repo->removeFile('file1.txt', 'file2.txt');
$repo->removeFile(['file3.txt', 'file4.txt']);
// adds all changes in repository
$repo->addAllChanges();

Branches

// gets list of all repository branches (remotes & locals)
$repo->getBranches();
// gets list of all local branches
$repo->getLocalBranches();
// gets name of current branch
$repo->getCurrentBranchName();
// creates new branch
$repo->createBranch('new-branch');
// creates new branch and checkout
$repo->createBranch('patch-1', TRUE);
// removes branch
$repo->removeBranch('branch-name');

Tags

// gets list of all tags in repository
$repo->getTags();
// creates new tag
$repo->createTag('v1.0.0');
$repo->createTag('v1.0.0', $options);
$repo->createTag('v1.0.0', [
	'-m' => 'message',
]);
// renames tag
$repo->renameTag('old-tag-name', 'new-tag-name');
// removes tag
$repo->removeTag('tag-name');

History

This functions working by reading files in .git/

// returns last commit ID on current branch
$commitId = $repo->getLastCommitId();
$commitId->getId(); // or (string) $commitId
// returns commit data
$commit = $repo->getCommit('734713bc047d87bf7eac9674765ae793478c50d3');
$commit->getId(); // instance of CommitId
$commit->getSubject();
$commit->getBody();
$commit->getAuthorName();
$commit->getAuthorEmail();
$commit->getAuthorDate();
$commit->getCommitterName();
$commit->getCommitterEmail();
$commit->getCommitterDate();
$commit->getDate();
// returns commit data of last commit on current branch
$commit = $repo->getLastCommit();

Remotes

// pulls changes from remote
$repo->pull('remote-name', ['--options']);
$repo->pull('origin');
// pushs changes to remote
$repo->push('remote-name', ['--options']);
$repo->push('origin');
$repo->push(['origin', 'master'], ['-u']);
// fetchs changes from remote
$repo->fetch('remote-name', ['--options']);
$repo->fetch('origin');
$repo->fetch(['origin', 'master']);
// adds remote repository
$repo->addRemote('remote-name', 'repository-url', ['--options']);
$repo->addRemote('origin', 'git@github.com:pvpender/git-kphp.git');
// renames remote
$repo->renameRemote('old-remote-name', 'new-remote-name');
$repo->renameRemote('origin', 'upstream');
// removes remote
$repo->removeRemote('remote-name');
$repo->removeRemote('origin');
// changes remote URL
$repo->setRemoteUrl('remote-name', 'new-repository-url');
$repo->setRemoteUrl('upstream', 'https://github.com/pvpender/git-kphp.git');

Based on https://github.com/czproject/git-php

About

License:Other


Languages

Language:PHP 99.8%Language:C 0.2%