Hoppa till innehåll

Pitmaster

Git i PHP: läs och skriv arkiv, beräkna diffar, sammanfoga och kommunicera via smart HTTP utan att anropa git via skalet.

Terminal
composer require pitmaster/pitmaster

Senaste versionen v0.2.11 MIT PHP 8.2+

I praktiken

Öppna ett arkiv och läs och skriv sedan i det med metodanrop eller från skalet.

Läs ett arkiv från PHP

Pitmaster::open() hittar katalogen .git och returnerar ett arkivhandtag. Varje statuspost innehåller ett separat tillstånd för indexet och arbetsträdet.

Från skalet speglar ./vendor/bin/pitmaster en delmängd av git-kommandona och fungerar 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är

Kärnoperationerna körs i PHP 8.2+ utan git-binär eller FFI. Krokar och reservlösningen SSH startar processer om du inte skickar med ['hooks' => false] eller processFreeOptions().

Läs och skriv

Lösa objekt, packfiler med deltaupplösning, indexet, refs och konfiguration. git läser det som Pitmaster skriver för indexversionerna 2 och 3 samt lösa refs.

Diff och sammanfogning

Diffar med Myers, patience och histogram samt identifiering av namnbyten. Trevägssammanfogning med konfliktmarkörer.

Nätverksprotokoll

Klona, hämtar och skickar över smart HTTP eller SSH, med en reservlösning via dumb HTTP för kloning och hämtning. Protokoll v2 är tillgängligt via klienterna på lägre nivå.

Git-operationer

lägga till, checka in, kontrollera status, jämföra ändringar, sammanfoga, checka ut, återställa, lägga undan, tillämpa en specifik ändring, återställa en ändring, ändra bashistorik, granska skuld, söka.

CLI

22 git-liknande kommandon, inklusive init, log, status, diff, add, commit, branch, merge, stash, blame och grep. Kloning, hämtning och push finns endast i biblioteket.

Testat mot oracle

761 scenarier jämför resultat med utdata som hämtats från verkliga git och körs i CI; 605 kommer från testsviterna för git självt, libgit2, go-git, isomorphic-git, dulwich och JGit.

Fullständig sökning

Blame, grep, bisect, notes och loggfilter för sökvägar utan att anropa git via skalet.

Varför Pitmaster

Fungerar utan en git-installation

Incheckningar, diffar, status och historik beräknas i PHP, så även containrar och värdar utan en git-binär kan arbeta med arkiv.

Handtag utan processer

Pitmaster::processFreeOptions() stänger av krokar, fsmonitor-krokar, kloning, hämtning, push och processtransport via SSH. Lokala läsningar och skrivningar fungerar fortfarande.

Kontrollerat mot git

Integrationstester körs mot binären git, och supportmatrisen räknar 146 av 146 funktioner inom omfattningen som verifierade mot oracle inom den angivna paritetsomfattningen.

SHA-1 och SHA-256

Skapa ett SHA-256-arkiv med Pitmaster::init($path, 'sha256') eller init --object-format=sha256. Packfiler läses och skrivs; commit-graph-, multi-pack-index- och reftable-filer kan läsas.

Jämfört med

Andra sätt att arbeta med Git-arkiv från PHP, och vad som skiljer Pitmaster.

Pitmaster jämfört med andra verktyg
git (kommandorad) Bra påReferensimplementationen, med en omfattande uppsättning kommandon som täcker både övergripande åtgärder och full åtkomst till interna funktioner. Skillnaden jämfört med PitmasterPitmaster körs inuti processen PHP, och kärnoperationer anropar inte git via skalet. Dess CLI motsvarar bara en delmängd av kommandona i git.
czproject/git-php Bra påEtt kompakt PHP-API för init, clone, commit, merge, grenar, taggar och fjärrarkiv. Det körs med PHP 8.0 eller senare och använder den installerade git-klienten. Skillnaden jämfört med PitmasterPitmaster behöver ingen git-klient för kärnoperationer eftersom det självt läser och skriver objekt, packfiler och indexet. Det kräver PHP 8.2 eller senare.
gitonomy/gitlib Bra påÅtkomst till arkiv från PHP 8.4 eller senare utan att behöva bygga något. Det fungerar genom att anropa git via skalet. Skillnaden jämfört med PitmasterPitmaster gör inga anrop via skalet för kärnoperationer, och en processfri hanterare inaktiverar de delar som skulle starta en process.
libgit2 Bra påEn portabel C-implementation av Gits kärnmetoder som ett länkbart bibliotek, med bindningar för Ruby, .NET, Python, Node.js, Rust med flera. Skillnaden jämfört med PitmasterPitmaster är vanlig PHP installerad med Composer, utan kompilerat bibliotek eller FFI. Det importerar 63 av sina oracle-scenarier från testresurserna för libgit2.

Frågor och svar

Korta svar från dokumentationen för Pitmaster.

Börja med kom igång-guiden för att öppna ditt första arkiv från PHP och använd sedan referenserna för API och CLI för resten.