Ga naar de inhoud

Pitmaster

Git in PHP: repositories lezen en schrijven, diffen, mergen en slimme HTTP-protocollen gebruiken zonder git als subprocess te starten.

Terminal
composer require pitmaster/pitmaster

Nieuwste release v0.2.11 MIT PHP 8.2+

In de praktijk

Open een repository en lees en schrijf deze vervolgens met method calls of vanuit de shell.

Een repository lezen vanuit PHP

Pitmaster::open() vindt de map .git en retourneert een repositoryhandle. Elke statusvermelding bevat een afzonderlijke status voor de index en de working tree.

Vanaf de shell weerspiegelt ./vendor/bin/pitmaster een subset van git-opdrachten en werkt het met een Composer-installatie, omdat 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";
}

Geen git-binary

Kerntaken worden uitgevoerd in PHP 8.2+ zonder git-binary of FFI. Hooks en de SSH-fallback starten processen, tenzij je ['hooks' => false] of processFreeOptions() doorgeeft.

Lezen en schrijven

Loose objects, pack-bestanden met deltaresolutie, de index, refs en configuratie. git leest wat Pitmaster schrijft voor indexversies 2 en 3 en loose refs.

Diff en merge

Myers-, patience- en histogram-diffs met hernoemingsdetectie. Three-way merge met conflictmarkeringen.

Netwerkprotocol

Clone, fetch en push via smart HTTP of SSH, met een dumb HTTP-fallback voor clone en fetch. Protocol v2 is beschikbaar via de clients op lager niveau.

Git-bewerkingen

toevoegen, vastleggen, status, verschil, samenvoegen, uitchecken, resetten, opbergen, cherry-picken, terugdraaien, rebasen, schuld toewijzen, zoeken.

CLI

22 opdrachten in git-stijl, waaronder init, log, status, diff, add, commit, branch, merge, stash, blame en grep. Clone, fetch en push zijn alleen beschikbaar via de library.

Getest met oracle

761 scenario's vergelijken resultaten met uitvoer die is vastgelegd van echte git en worden uitgevoerd in CI; 605 zijn afkomstig uit de testsuites van git zelf, libgit2, go-git, isomorphic-git, dulwich en JGit.

Volledig zoeken

Blame, grep, bisect, notes en een logpadfilter, zonder git als subprocess te starten.

Waarom Pitmaster

Werkt zonder git-installatie

Commits, diffs, status en geschiedenis worden berekend in PHP, zodat containers en hosts zonder git-binary toch met repositories kunnen werken.

Handles zonder processen

Pitmaster::processFreeOptions() schakelt hooks, fsmonitor-hooks, clone, fetch, push en SSH-procest transport uit. Lokaal lezen en schrijven blijft werken.

Getoetst aan git

Integratietests worden uitgevoerd tegen de git-binary, en de supportmatrix telt 146 van de 146 functies binnen scope als geverifieerd met oracle binnen de gedeclareerde pariteitsscope.

SHA-1 en SHA-256

Maak een SHA-256-repository met Pitmaster::init($path, 'sha256') of init --object-format=sha256. Pack-bestanden worden gelezen en geschreven; commit-graph-, multi-pack-index- en reftable-bestanden kunnen worden gelezen.

Vergeleken met

Andere manieren om met Git-repositories te werken vanuit PHP, en de verschillen met Pitmaster.

Pitmaster vergeleken met andere tools
git (opdrachtregel) Goed inDe referentie-implementatie, met een uitgebreide set opdrachten voor zowel bewerkingen op hoog niveau als volledige toegang tot interne onderdelen. Verschil met PitmasterPitmaster draait binnen het PHP-proces en kerntaken starten git niet als subprocess. De CLI weerspiegelt slechts een subset van de git-opdrachten.
czproject/git-php Goed inEen compacte PHP API voor init, clone, commit, merge, branches, tags en remotes. Werkt met PHP 8.0 of hoger en gebruikt de geïnstalleerde git-client. Verschil met PitmasterPitmaster heeft voor kerntaken geen git-client nodig, omdat het zelf objecten, pack-bestanden en de index leest en schrijft. Vereist PHP 8.2 of hoger.
gitonomy/gitlib Goed inRepositorytoegang vanuit PHP 8.4 of hoger zonder iets te bouwen. Het werkt door shell-opdrachten naar git uit te voeren. Verschil met PitmasterPitmaster voert geen shell-opdrachten uit voor kerntaken, en een handle zonder processen schakelt de onderdelen uit die anders een proces zouden starten.
libgit2 Goed inEen portable C-implementatie van de kernmethoden van Git als linkbare library, met bindings voor Ruby, .NET, Python, Node.js, Rust en meer. Verschil met PitmasterPitmaster is gewone PHP die met Composer wordt geïnstalleerd, zonder gecompileerde library of FFI. Het importeert 63 oracle-scenario's uit de testbronnen van libgit2.

Vragen en antwoorden

Korte antwoorden uit de documentatie van Pitmaster.

Begin met de handleiding Aan de slag om je eerste repository te openen vanuit PHP en gebruik daarna de verwijzingen naar API en CLI voor de rest.