Aller au contenu

Pitmaster

Git dans PHP : lire et écrire des dépôts, comparer, fusionner et communiquer avec le HTTP intelligent sans lancer git en sous-processus.

Terminal
composer require pitmaster/pitmaster

Dernière version v0.2.11 MIT PHP 8.2+

En pratique

Ouvrez un dépôt, puis lisez-le et modifiez-le avec des appels de méthode ou depuis le shell.

Lire un dépôt depuis PHP

Pitmaster::open() localise le répertoire .git et renvoie un handle de dépôt. Chaque entrée d’état contient un état distinct pour l’index et l’arbre de travail.

Depuis le shell, ./vendor/bin/pitmaster reprend un sous-ensemble des commandes git et fonctionne avec une installation Composer, car 0.2.11.

PHP
use Pitmaster\Pitmaster;

$repo = Pitmaster::open('/path/to/project');

// Read the current HEAD commit
$head = $repo->head();
echo $head->message;

// List branches
foreach ($repo->branches() as $branch) {
    echo $branch . "\n";
}

// Check status
foreach ($repo->status() as $entry) {
    echo "{$entry->path}: {$entry->index->value}{$entry->worktree->value}\n";
}

Pas de binaire git

Les opérations principales s’exécutent dans PHP 8.2+ sans binaire git ni FFI. Les hooks et le mécanisme de repli SSH lancent des processus, sauf si vous passez ['hooks' => false] ou processFreeOptions().

Lecture et écriture

Objets libres, fichiers pack avec résolution des deltas, index, références et configuration. git lit ce que Pitmaster écrit pour les versions 2 et 3 de l’index et les références libres.

Comparaison et fusion

Comparaisons Myers, patience et histogramme avec détection des renommages. Fusion à trois voies avec marqueurs de conflit.

Protocole réseau

Clonage, récupération et envoi via HTTP ou SSH intelligents, avec un mécanisme de repli HTTP pour le clonage et la récupération. Le protocole v2 est disponible via les clients de plus bas niveau.

Opérations Git

ajouter, valider, afficher l’état, comparer, fusionner, extraire, réinitialiser, mettre de côté, appliquer un commit sélectionné, annuler, réorganiser, afficher les auteurs, rechercher.

CLI

22 commandes de style git, dont init, log, status, diff, add, commit, branch, merge, stash, blame et grep. Clone, fetch et push sont réservés à la bibliothèque.

Vérifié par oracle

761 scénarios comparent les résultats aux sorties capturées depuis git et sont exécutés dans CI ; 605 proviennent des suites de tests de git, libgit2, go-git, isomorphic-git, dulwich et JGit.

Recherche complète

Blame, grep, bisect, notes et filtre de journal par chemin, sans lancer git en sous-processus.

Pourquoi Pitmaster

Fonctionne sans installation de git

Les commits, comparaisons, états et historiques sont calculés dans PHP ; les conteneurs et les hôtes dépourvus de binaire git peuvent donc tout de même utiliser des dépôts.

Handles sans processus

Pitmaster::processFreeOptions() désactive les hooks, les hooks fsmonitor, le clonage, la récupération, l’envoi et le transport de processus SSH. Les lectures et écritures locales continuent de fonctionner.

Vérifié par rapport à git

Les tests d’intégration s’exécutent avec le binaire git, et la matrice de prise en charge indique 146 des 146 fonctionnalités incluses dans le périmètre comme vérifiées par oracle, dans le périmètre de parité déclaré.

SHA-1 et SHA-256

Créez un dépôt SHA-256 avec Pitmaster::init($path, 'sha256') ou init --object-format=sha256. Les fichiers pack sont lus et écrits ; les fichiers commit-graph, multi-pack index et reftable peuvent être lus.

Comparaison avec

Autres façons de travailler avec des dépôts Git depuis PHP, et différences de Pitmaster.

Pitmaster comparé à d'autres outils
git (ligne de commande) Idéal pourL’implémentation de référence, avec un riche ensemble de commandes couvrant les opérations de haut niveau et un accès complet aux éléments internes. Différence avec PitmasterPitmaster s’exécute dans le processus PHP et les opérations principales ne lancent pas git en sous-processus. Son CLI ne reprend qu’un sous-ensemble des commandes git.
czproject/git-php Idéal pourUn PHP API compact pour init, clone, commit, merge, branches, tags et remotes. Il fonctionne avec PHP 8.0 ou version ultérieure et utilise le client git installé. Différence avec PitmasterPitmaster n’a pas besoin du client git pour les opérations principales, car il lit et écrit lui-même les objets, les fichiers pack et l’index. Il requiert PHP 8.2 ou version ultérieure.
gitonomy/gitlib Idéal pourAccès aux dépôts depuis PHP 8.4 ou version ultérieure, sans rien à compiler. Fonctionne en lançant des commandes shell pour git. Différence avec PitmasterPitmaster ne lance aucune commande shell pour les opérations principales, et un handle sans processus désactive les parties qui en démarreraient un.
libgit2 Idéal pourUne implémentation C portable des méthodes principales de Git sous forme de bibliothèque pouvant être liée, avec des liaisons pour Ruby, .NET, Python, Node.js, Rust et d’autres langages. Différence avec PitmasterPitmaster est du PHP pur installé avec Composer, sans bibliothèque compilée ni FFI. Il importe 63 de ses scénarios oracle depuis les ressources de test de libgit2.

Questions et réponses

Réponses courtes issues de la documentation de Pitmaster.

Commencez par le guide de démarrage pour ouvrir votre premier dépôt depuis PHP, puis consultez les références API et CLI pour le reste.