Gå til indhold

Pitmaster

Git i PHP: læs og skriv repositories, lav diff og merge, og brug smart HTTP uden at starte git som en separat proces.

Terminal
composer require pitmaster/pitmaster

Seneste udgivelse v0.2.11 MIT PHP 8.2+

I praksis

Åbn et repository, og læs eller skriv i det med metodekald eller fra shellen.

Læs et repository fra PHP

Pitmaster::open() finder mappen .git og returnerer et repository-handle. Hver statuspost har en separat tilstand for indekset og arbejdstræet.

Fra shellen efterligner ./vendor/bin/pitmaster et udsnit af gits kommandoer og fungerer med en Composer-installation, eftersom 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";
}

Ingen git-binærfil

Kernehandlinger kører i PHP 8.2+ uden git-binærfil eller FFI. Hooks og SSH-fallbacken starter processer, medmindre du angiver ['hooks' => false] eller processFreeOptions().

Læs og skriv

Løse objekter, pakkefiler med deltaopløsning, indekset, refs og konfiguration. git læser det, som Pitmaster skriver, for indeksversion 2 og 3 samt løse refs.

Diff og merge

Myers-, patience- og histogram-diffs med registrering af omdøbninger. Trevejsfletning med konfliktmarkører.

Netværksprotokol

Klon, hent og push via smart HTTP eller SSH med en dum HTTP-fallback til klon og hent. Protokol v2 er tilgængelig via klienter på lavere niveau.

Git-handlinger

tilføj, indsend, status, forskel, flet, skift gren, nulstil, læg til side, vælg commit, fortryd, rebase, vis blame, søg.

CLI

22 git-lignende kommandoer, herunder init, log, status, diff, add, commit, branch, merge, stash, blame og grep. Klon, hent og push er kun tilgængelige via biblioteket.

Testet mod orakel

761 scenarier sammenligner resultater med output fra ægte git og køres i CI; 605 kommer fra testsuiterne for git selv, libgit2, go-git, isomorphic-git, dulwich og JGit.

Fuld søgning

Blame, grep, bisect, notes og et log-filter efter sti, uden at starte git som en separat proces.

Hvorfor Pitmaster

Fungerer uden git installeret

Commits, diffs, status og historik beregnes i PHP, så containere og værter uden en git-binærfil stadig kan arbejde med repositories.

Handles uden processer

Pitmaster::processFreeOptions() slår hooks, fsmonitor-hooks, klon, hent, push og SSH-procestransport fra. Lokale læse- og skrivehandlinger fungerer stadig.

Kontrolleret mod git

Integrationstests køres mod git-binærfilen, og supportmatricen tæller 146 af 146 funktioner inden for omfanget som verificeret mod oraklet inden for det erklærede paritetsomfang.

SHA-1 og SHA-256

Opret et SHA-256-repository med Pitmaster::init($path, 'sha256') eller init --object-format=sha256. Pakkefiler kan læses og skrives; commit-graph-, multi-pack-indeks- og reftable-filer kan læses.

Sammenlignet med

Andre måder at arbejde med Git-repositories fra PHP på, og hvordan Pitmaster adskiller sig.

Pitmaster sammenlignet med andre værktøjer
git (kommandolinje) God tilReferenceimplementeringen med et omfattende kommandosæt, der dækker både overordnede handlinger og fuld adgang til interne funktioner. Forskel fra PitmasterPitmaster kører i PHP-processen, og kernehandlinger starter ikke git som en separat proces. Dets CLI efterligner kun et udsnit af gits kommandoer.
czproject/git-php God tilEt kompakt PHP API til init, klon, commit, merge, brancher, tags og remotes. Det kører på PHP 8.0 eller nyere og styrer den installerede git-klient. Forskel fra PitmasterPitmaster kræver ingen git-klient til kernehandlinger, fordi det selv læser og skriver objekter, pakkefiler og indekset. Det kræver PHP 8.2 eller nyere.
gitonomy/gitlib God tilAdgang til repositories fra PHP 8.4 eller nyere uden noget, der skal bygges. Det fungerer ved at køre shellkommandoer til git. Forskel fra PitmasterPitmaster kører ingen shellkommandoer til kernehandlinger, og et handle uden processer deaktiverer de dele, der ellers ville starte en proces.
libgit2 God tilEn portabel C-implementering af Gits kernefunktioner som et linkbart bibliotek med bindinger til Ruby, .NET, Python, Node.js, Rust og flere. Forskel fra PitmasterPitmaster er almindelig PHP installeret med Composer, uden kompileret bibliotek eller FFI. 63 af dets orakelscenarier er importeret fra libgit2s testressourcer.

Spørgsmål og svar

Korte svar fra Pitmaster-dokumentationen.

Start med vejledningen til at komme i gang for at åbne dit første repository fra PHP, og brug derefter referencerne API og CLI til resten.