PHP git wrapper

2.4.0 2019-09-30 15:04 UTC


Latest Stable Version Minimum PHP Version Downloads License Build Status Scrutinizer Code Quality Code Coverage

This lib is used to execute git commands via an easy PHP api. All you have to do is setup a Repository object, retrieve a command Operator and fire away. Each git command like git config or git log is handled by an separate Operator. Follow the next steps to give it a try.


The git package is installable via composer. Just run the following command.

$ composer require sebastianfeldmann/git


Setup the Repository

$repoRootPath  = '/var/www/my-project';
$gitRepository = new Git\Repository($repoRootPath);

Retrieve the needed Operator

$log = $repo->getLogOperator();

Get files and commits since some tag

$files   = $log->getChangedFilesSince('1.0.0');
$commits = $log->getCommitsSince('1.0.0');

Copy Paste Example

use SebastianFeldmann\Git;

require __DIR__ . '/../vendor/autoload.php';

// path to repository without .git
$repoRootPath  = '/path/to/repo';
$gitRepository = new Git\Repository($repoRootPath);

// get files and commits since hash or tag
$log     = $repo->getLogOperator();
$files   = $log->getChangedFilesSince('1.0.0');
$commits = $log->getCommitsSince('1.0.0');

// check the index status
$index = $repo->getIndexOperator();
$files = $index->getStagedFiles();

Available operators

  • Config - Access all git settings e.g. line break settings.
  • Diff - Compare to versions.
  • Index - Check the staging area.
  • Info - Access the current state like branch name or commit hash.
  • Log - Returns list of changed files and other log features.

Example commands

Get the current tag:

// git describe --tag
$tag = $infoOperator->getCurrentTag(); 

Get tags for a given commit:

// git tag --points-at HEAD
$tags = $infoOperator->getTagsPointingTo('HEAD'); 

Get the current branch:

// git rev-parse --abbrev-ref HEAD
$branch = $infoOperator->getCurrentBranch(); 

Get a list of staged files:

// git diff-index --cached --name-status HEAD
$files = $indexOperator->getStagedFiles();

Get all current git settings:

// git config --list
$config = $configOperator->getSettings();

Get all changed files since a given commit or tag:

// git log --format='' --name-only $HASH
$files = $logOperator->changedFilesSince('1.0.0');

Get differences between two versions

// git diff '1.0.0' '1.1.0'
$changes = $diffOperator->compare('1.0.0', '1.1.0');