Skip to content

An intuitive service provider for Laravel and Laravel Zero, streamlining Git repository management both within and outside your application.

License

Notifications You must be signed in to change notification settings

aybarsm/laravel-git

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

18 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

What It Does

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.

Installation

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

Configure Git Provider

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'],
        ],
    ],
];

Usage

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.

Example

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');

About

An intuitive service provider for Laravel and Laravel Zero, streamlining Git repository management both within and outside your application.

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages