This package is crafted for both Laravel and Laravel Zero developers aiming to integrate and manage Git repositories seamlessly within their applications. Whether you're looking to control a repository residing within your application or interact with external ones, this service provider simplifies those interactions. Built on the foundation of Laravel's service container, it provides a straightforward and efficient approach to manage your Git operations, keeping your application connected and in sync with your versioning needs.
You can install the package via composer:
composer require aybarsm/laravel-git
You can publish the config file by:
php artisan vendor:publish --provider="Aybarsm\Laravel\Git\GitServiceProvider" --tag=config
You can change the concretes by extending the classes, remove or add new repos and modify commands with subcommands.
Note: The list of the commands only covers the commands with subcommands. Almost all git command has been implemented to the concrete and interface in the package.
return [
'repos' => [
'default' => base_path(),
],
'concretes' => [
'Git' => \Aybarsm\Laravel\Git\Git::class,
'GitRepo' => \Aybarsm\Laravel\Git\GitRepo::class,
],
'commands' => [
'bisect' => [
'subcommands' => ['start', 'bad', 'new', 'good', 'old', 'terms', 'skip', 'reset', 'visualize', 'view', 'replay', 'log', 'run'],
],
'bundle' => [
'subcommands' => ['create', 'verify', 'list-heads', 'unbundle'],
],
'maintenance' => [
'subcommands' => ['run', 'start', 'stop', 'register', 'unregister'],
],
'notes' => [
'subcommands' => ['list', 'add', 'copy', 'append', 'edit', 'show', 'merge', 'remove', 'prune', 'get-ref'],
],
'sparse-checkout' => [
'subcommands' => ['init', 'list', 'set', 'add', 'reapply', 'disable', 'check-rules'],
],
'stash' => [
'subcommands' => ['list', 'show', 'drop', 'pop', 'apply', 'branch', 'push', 'save', 'clear', 'create', 'store'],
],
'submodule' => [
'subcommand_prefixes' => ['--quiet'],
'subcommands' => ['add', 'status', 'init', 'deinit', 'update', 'set-branch', 'set-url', 'summary', 'foreach', 'sync', 'absorbgitdirs'],
],
'worktree' => [
'subcommands' => ['add', 'list', 'lock', 'move', 'prune', 'remove', 'repair', 'unlock'],
],
'reflog' => [
'subcommands' => ['show', 'expire', 'delete', 'exists'],
],
'remote' => [
'subcommands' => ['add', 'rename', 'remove', 'set-head', 'set-branches', 'get-url', 'set-url', 'show', 'prune', 'update'],
],
'p4' => [
'subcommands' => ['clone', 'sync', 'rebase', 'submit'],
],
'commit-graph' => [
'subcommands' => ['verify', 'write'],
],
'credential' => [
'subcommands' => ['fill', 'approve', 'reject'],
],
'hook' => [
'subcommands' => ['run'],
],
],
];
You can call the concrete Git by either Git::class Facade or with helper function git(). Another helper function of gitRepo($repoName) has also implemented to directly call pre-defined Git Repos.
use Aybarsm\Laravel\Support\Enums\ProcessReturnType;
$git = git();
$repo = $git->repo(); // Returns the default pre-defined repo
// or you can directly reach the repo
// $repo = gitRepo('default');
if ($repo->isReady() && $repo->isDirty()){
// arguments accepts strings or cli type arrays like arg, --arg=value, -arg value or -arg
$repo->commit(
args: [
'-a',
'-m' => '"v1.0.0"'
]
)
// Git and GitRepo concretes are already uses Laravel's Conditionable trait however chaining made easier with pre-defined whenSuccessful and whenFailed methods.
->whenSuccessful(
callback: fn ($repoInstance) => $repoInstance->tag('v1.0.0'),
default: function ($repoInstance) {
Log::info('Git Repo Command Error', (array)$repoInstance->result(ProcessReturnType::ALL_OUTPUT));
return $repoInstance;
}
)
->whenSuccessful(
callback: fn ($repoInstance) => $repoInstance->push('origin v1.0.0'),
default: function ($repoInstance) {
Log::info('Git Repo Command Error', (array)$repoInstance->result(ProcessReturnType::ALL_OUTPUT));
return $repoInstance;
}
);
}
// You can easily create individual GitRepo instances by
$newRepo = GitRepo::make('someName', '/some/path');