Zum Inhalt springen

Pitmaster

Git in PHP: Repositories lesen und schreiben, diffen, mergen und über smartes HTTP kommunizieren, ohne git als externen Prozess aufzurufen.

Terminal
composer require pitmaster/pitmaster

Neueste Version v0.2.11 MIT PHP 8.2+

In der Praxis

Öffne ein Repository und lies oder bearbeite es anschließend mit Methodenaufrufen oder über die Shell.

Repository aus PHP lesen

Pitmaster::open() findet das Verzeichnis .git und gibt ein Repository-Handle zurück. Jeder Statuseintrag enthält einen eigenen Status für den Index und das Arbeitsverzeichnis.

Über die Shell bildet ./vendor/bin/pitmaster einen Teil der git-Befehle nach und funktioniert seit 0.2.11 auch mit einer Composer-Installation.

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";
}

Kein git-Binärprogramm

Kernfunktionen laufen in PHP 8.2+ ohne git-Binärprogramm oder FFI. Hooks und der SSH-Fallback starten Prozesse, sofern du nicht ['hooks' => false] oder processFreeOptions() übergibst.

Lesen und Schreiben

Loose-Objekte, Pack-Dateien mit Delta-Auflösung, der Index, Refs und Konfiguration. git kann lesen, was Pitmaster für Indexversionen 2 und 3 sowie Loose-Refs schreibt.

Diff und Merge

Myers-, Patience- und Histogramm-Diffs mit Umbenennungserkennung. Drei-Wege-Merge mit Konfliktmarkierungen.

Netzwerkprotokoll

Klonen, Abrufen und Pushen über smartes HTTP oder SSH, mit einem dummen HTTP-Fallback für Klonen und Abrufen. Protokoll v2 ist über die Clients auf niedrigerer Ebene verfügbar.

Git-Operationen

Hinzufügen, committen, Status anzeigen, Änderungen vergleichen, zusammenführen, auschecken, zurücksetzen, zwischenspeichern, Cherry-pick, rückgängig machen, Rebase, Zeilenhistorie anzeigen, suchen.

CLI

22 Befehle im Stil von git, darunter init, log, status, diff, add, commit, branch, merge, stash, blame und grep. Clone, fetch und push sind nur über die Bibliothek verfügbar.

Mit Oracle getestet

761 Szenarien vergleichen Ergebnisse mit Ausgaben von echtem git und laufen in CI; 605 stammen aus den Testsuiten von git selbst, libgit2, go-git, isomorphic-git, dulwich und JGit.

Vollständige Suche

Blame, grep, bisect, notes und ein Pfadfilter für Logs, ohne git als externen Prozess aufzurufen.

Warum Pitmaster

Funktioniert ohne git-Installation

Commits, Diffs, Status und Verlauf werden in PHP berechnet. So können auch Container und Hosts ohne git-Binärprogramm mit Repositories arbeiten.

Handles ohne Prozesse

Pitmaster::processFreeOptions() deaktiviert Hooks, fsmonitor-Hooks, Klonen, Abrufen, Pushen und SSH-Prozesstransport. Lokales Lesen und Schreiben funktioniert weiterhin.

Mit git abgeglichen

Integrationstests laufen gegen das git-Binärprogramm. Laut Support-Matrix sind 146 von 146 Funktionen im Umfang innerhalb des angegebenen Paritätsumfangs durch das Oracle bestätigt.

SHA-1 und SHA-256

Erstelle ein SHA-256-Repository mit Pitmaster::init($path, 'sha256') oder init --object-format=sha256. Pack-Dateien lassen sich lesen und schreiben; Commit-Graph-, Multi-Pack-Index- und Reftable-Dateien lassen sich lesen.

Im Vergleich zu

Weitere Möglichkeiten, Git-Repositories aus PHP zu bearbeiten und zu sehen, worin sich Pitmaster unterscheidet.

Pitmaster im Vergleich zu anderen Werkzeugen
git (Befehlszeile) Gut geeignet fürDie Referenzimplementierung mit umfangreichen Befehlen für übergeordnete Operationen und vollständigen Zugriff auf interne Funktionen. Unterschiede zu PitmasterPitmaster läuft innerhalb des PHP-Prozesses, und Kernoperationen rufen git nicht als externen Prozess auf. Das CLI bildet nur einen Teil der git-Befehle nach.
czproject/git-php Gut geeignet fürEin kompaktes PHP-API für init, Klonen, Commits, Merges, Branches, Tags und Remotes. Es läuft mit PHP 8.0 oder höher und steuert den installierten git-Client. Unterschiede zu PitmasterPitmaster benötigt für Kernoperationen keinen git-Client, da es Objekte, Pack-Dateien und den Index selbst liest und schreibt. Voraussetzung ist PHP 8.2 oder höher.
gitonomy/gitlib Gut geeignet fürZugriff auf Repositories ab PHP 8.4, ohne etwas kompilieren zu müssen. Die Arbeit erfolgt über Shell-Aufrufe an git. Unterschiede zu PitmasterPitmaster führt für Kernoperationen keine Shell-Aufrufe aus. Ein Handle ohne Prozesse deaktiviert Funktionen, die sonst einen Prozess starten würden.
libgit2 Gut geeignet fürEine portable C-Implementierung der Git-Kernmethoden als verknüpfbare Bibliothek mit Bindings für Ruby, .NET, Python, Node.js, Rust und mehr. Unterschiede zu PitmasterPitmaster ist reines PHP und wird mit Composer installiert, ohne kompilierte Bibliothek oder FFI. 63 Oracle-Szenarien stammen aus den Testressourcen von libgit2.

Fragen und Antworten

Kurze Antworten aus der Pitmaster-Dokumentation.

Beginne mit der Schnellstartanleitung, um dein erstes Repository aus PHP zu öffnen. Verwende anschließend die Referenzen zu API und CLI.