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.
composer require pitmaster/pitmasterSeneste udgivelse 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/oldI 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.
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 featureIngen 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.
| Værktøj | God til | Forskel fra Pitmaster |
|---|---|---|
| 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. |
Kilder, markeret
Spørgsmål og svar
Korte svar fra Pitmaster-dokumentationen.
Nej. Kernehandlinger med repositories bruger hverken git-binærfilen eller FFI. Objekter, refs, pakkefiler, indekset og smart HTTP håndteres i PHP.
Ja. Angiv Pitmaster::processFreeOptions() eller ['processes' => false], når repositoryet åbnes. Hooks, klon, hent, push og SSH-procestransport deaktiveres derefter, mens lokale læse- og skrivehandlinger stadig er tilgængelige.
Ja, hooks er som standard aktiveret og køres via proc_open(). Angiv ['hooks' => false] til Pitmaster::open(), Pitmaster::init() eller Pitmaster::clone() for at springe scripts i .git/hooks over for det pågældende handle.
Pitmaster::clone(), fetch() og push() bruger SSH til SSH-URL'er og ellers smart HTTP, og klon og hent falder tilbage til dum HTTP, når den smarte udveksling mislykkes. SSH bruger ssh2-udvidelsen, når den er indlæst, og ellers systemets ssh-binærfil.
Ja. Angiv 'sha256' som det andet argument til Pitmaster::init(), eller kør init med --object-format=sha256. Objekter bruger derefter 64-tegns hashes.
Nej. Det efterligner et udsnit af gits kommandoer, f.eks. log, status, diff, commit, merge, blame og grep. Klon, hent og push er kun tilgængelige via PHP API.
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.