clone('https://github.com/kzykhys/PHPGit.git', '/path/to/repo'); * $git->setRepository('/path/to/repo'); * $git->remote->add('production', 'git://example.com/your/repo.git'); * $git->add('README.md'); * $git->commit('Adds README.md'); * $git->checkout('release'); * $git->merge('master'); * $git->push(); * $git->push('production', 'release'); * $git->tag->create('v1.0.1', 'release'); * * foreach ($git->tree('release') as $object) { * if ($object['type'] == 'blob') { * echo $git->show($object['file']); * } * } * ``` * * @author Kazuyuki Hayashi * @license MIT * * @method add($file, $options = array()) Add file contents to the index * @method archive($file, $tree = null, $path = null, $options = array()) Create an archive of files from a named tree * @method branch($options = array()) List both remote-tracking branches and local branches * @method checkout($branch, $options = array()) Checkout a branch or paths to the working tree * @method clone($repository, $path = null, $options = array()) Clone a repository into a new directory * @method commit($message = '', $options = array()) Record changes to the repository * @method config($options = array()) List all variables set in config file * @method describe($committish = null, $options = array()) Returns the most recent tag that is reachable from a commit * @method fetch($repository, $refspec = null, $options = array()) Fetches named heads or tags from one or more other repositories * @method init($path, $options = array()) Create an empty git repository or reinitialize an existing one * @method log($path = null, $options = array()) Returns the commit logs * @method merge($commit, $message = null, $options = array()) Incorporates changes from the named commits into the current branch * @method mv($source, $destination, $options = array()) Move or rename a file, a directory, or a symlink * @method pull($repository = null, $refspec = null, $options = array()) Fetch from and merge with another repository or a local branch * @method push($repository = null, $refspec = null, $options = array()) Update remote refs along with associated objects * @method rebase($upstream = null, $branch = null, $options = array()) Forward-port local commits to the updated upstream head * @method remote() Returns an array of existing remotes * @method reset($commit = null, $paths = array()) Resets the index entries for all to their state at * @method rm($file, $options = array()) Remove files from the working tree and from the index * @method shortlog($commits = array()) Summarize 'git log' output * @method show($object, $options = array()) Shows one or more objects (blobs, trees, tags and commits) * @method stash() Save your local modifications to a new stash, and run git reset --hard to revert them * @method status($options = array()) Show the working tree status * @method tag() Returns an array of tags * @method tree($branch = 'master', $path = '') List the contents of a tree object */ class Git { /** @var Command\AddCommand */ public $add; /** @var Command\ArchiveCommand */ public $archive; /** @var Command\BranchCommand */ public $branch; /** @var Command\CatCommand */ public $cat; /** @var Command\CheckoutCommand */ public $checkout; /** @var Command\CloneCommand */ public $clone; /** @var Command\CommitCommand */ public $commit; /** @var Command\ConfigCommand */ public $config; /** @var Command\DescribeCommand */ public $describe; // Not implemented yet public $diff; /** @var Command\FetchCommand */ public $fetch; /** @var Command\InitCommand */ public $init; /** @var Command\LogCommand */ public $log; /** @var Command\MergeCommand */ public $merge; /** @var Command\MvCommand */ public $mv; /** @var Command\PullCommand */ public $pull; /** @var Command\PushCommand */ public $push; /** @var Command\RebaseCommand */ public $rebase; /** @var Command\RemoteCommand */ public $remote; /** @var Command\ResetCommand */ public $reset; /** @var Command\RmCommand */ public $rm; /** @var Command\ShortlogCommand */ public $shortlog; /** @var Command\ShowCommand */ public $show; /** @var Command\StashCommand */ public $stash; /** @var Command\StatusCommand */ public $status; /** @var Command\TagCommand */ public $tag; /** @var Command\TreeCommand */ public $tree; /** @var string */ private $bin = 'git'; /** @var string */ private $directory = '.'; /** * Initializes sub-commands */ public function __construct() { $this->add = new Command\AddCommand($this); $this->archive = new Command\ArchiveCommand($this); $this->branch = new Command\BranchCommand($this); $this->cat = new Command\CatCommand($this); $this->checkout = new Command\CheckoutCommand($this); $this->clone = new Command\CloneCommand($this); $this->commit = new Command\CommitCommand($this); $this->config = new Command\ConfigCommand($this); $this->describe = new Command\DescribeCommand($this); $this->fetch = new Command\FetchCommand($this); $this->init = new Command\InitCommand($this); $this->log = new Command\LogCommand($this); $this->merge = new Command\MergeCommand($this); $this->mv = new Command\MvCommand($this); $this->pull = new Command\PullCommand($this); $this->push = new Command\PushCommand($this); $this->rebase = new Command\RebaseCommand($this); $this->remote = new Command\RemoteCommand($this); $this->reset = new Command\ResetCommand($this); $this->rm = new Command\RmCommand($this); $this->shortlog = new Command\ShortlogCommand($this); $this->show = new Command\ShowCommand($this); $this->stash = new Command\StashCommand($this); $this->status = new Command\StatusCommand($this); $this->tag = new Command\TagCommand($this); $this->tree = new Command\TreeCommand($this); } /** * Calls sub-commands * * @param string $name The name of a property * @param array $arguments An array of arguments * * @throws \BadMethodCallException * @return mixed */ public function __call($name, $arguments) { if (isset($this->{$name}) && is_callable($this->{$name})) { return call_user_func_array($this->{$name}, $arguments); } throw new \BadMethodCallException(sprintf('Call to undefined method PHPGit\Git::%s()', $name)); } /** * Sets the Git binary path * * @param string $bin * * @return Git */ public function setBin($bin) { $this->bin = $bin; return $this; } /** * Sets the Git repository path * * @var string $directory * * @return Git */ public function setRepository($directory) { $this->directory = $directory; return $this; } /** * Returns version number * * @return mixed */ public function getVersion() { $process = $this->getProcessBuilder() ->add('--version') ->getProcess(); return $this->run($process); } /** * Returns an instance of ProcessBuilder * * @return ProcessBuilder */ public function getProcessBuilder() { return ProcessBuilder::create() ->setPrefix($this->bin) ->setWorkingDirectory($this->directory); } /** * Executes a process * * @param Process $process The process to run * * @throws Exception\GitException * @return mixed */ public function run(Process $process) { $process->run(); if (!$process->isSuccessful()) { throw new GitException($process->getErrorOutput(), $process->getExitCode(), $process->getCommandLine()); } return $process->getOutput(); } }