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.
composer require pitmaster/pitmasterDernière version v0.2.11 MIT PHP 8.2+
# List all branches (current marked with *)
./bin/pitmaster branch
# Create a new branch from HEAD
./bin/pitmaster branch feature/new-thing
# Delete a branch
./bin/pitmaster branch -d feature/old
./bin/pitmaster branch -D feature/oldEn 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.
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";
}./vendor/bin/pitmaster log
./vendor/bin/pitmaster status
./vendor/bin/pitmaster diff
./vendor/bin/pitmaster show HEAD
./vendor/bin/pitmaster add file.txt
./vendor/bin/pitmaster commit -m "message"
./vendor/bin/pitmaster branch feature
./vendor/bin/pitmaster checkout feature
./vendor/bin/pitmaster merge featurePas 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.
| Outil | Idéal pour | Différence avec Pitmaster |
|---|---|---|
| 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.
Non. Les opérations principales sur les dépôts n’utilisent ni le binaire git ni FFI. Les objets, références, fichiers pack, l’index et le protocole smart HTTP sont gérés en PHP.
Oui. Transmettez Pitmaster::processFreeOptions() ou ['processes' => false] à l’ouverture du dépôt. Les hooks, clone, fetch, push et le transport de processus SSH sont alors désactivés, tandis que les lectures et écritures locales restent disponibles.
Oui, les hooks sont activés par défaut et s’exécutent via proc_open(). Transmettez ['hooks' => false] à Pitmaster::open(), Pitmaster::init() ou Pitmaster::clone() pour ignorer les scripts de .git/hooks pour ce handle.
Pitmaster::clone(), fetch() et push() utilisent SSH pour les URL SSH et le protocole smart HTTP dans les autres cas ; clone et fetch utilisent le protocole dumb HTTP si l’échange smart échoue. SSH utilise l’extension ssh2 si elle est chargée, sinon le binaire ssh du système.
Oui. Transmettez 'sha256' comme deuxième argument à Pitmaster::init(), ou lancez init avec --object-format=sha256. Les objets utilisent alors des empreintes de 64 caractères.
Non. Il reprend un sous-ensemble des commandes git, comme log, status, diff, commit, merge, blame et grep. Clone, fetch et push sont disponibles uniquement via le PHP API.
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.