Pitmaster
Git v PHP: čítanie a zápis repozitárov, diff, zlúčenie a inteligentná komunikácia cez HTTP bez spúšťania git z príkazového riadka.
composer require pitmaster/pitmasterNajnovšie vydanie 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/oldV praxi
Otvorte repozitár, potom ho čítajte a zapisujte pomocou volaní metód alebo z shellu.
Čítanie repozitára z PHP
Pitmaster::open() nájde adresár .git a vráti objekt repozitára. Každá položka stavu obsahuje samostatný stav indexu a pracovného stromu.
./vendor/bin/pitmaster zo shellu napodobňuje podmnožinu príkazov git a funguje aj pri inštalácii Composer, keďže 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 featureBez binárneho súboru git
Základné operácie bežia v PHP 8.2+ bez binárneho súboru git alebo FFI. Hooky a záložná možnosť SSH spúšťajú procesy, pokiaľ neodovzdáte ['hooks' => false] alebo processFreeOptions().
Čítanie a zápis
Voľné objekty, pack súbory s rozlíšením delta, index, odkazy a konfigurácia. git číta to, čo Pitmaster zapisuje, pre verzie indexu 2 a 3 a voľné odkazy.
Diff a zlúčenie
Diffy Myers, patience a histogram s detekciou premenovaní. Trojcestné zlúčenie so značkami konfliktov.
Sieťový protokol
Klonujte, načítavajte a odosielajte zmeny cez inteligentné HTTP alebo SSH, s náhradným hlúpym HTTP na klonovanie a načítavanie. Protokol v2 je dostupný cez klientov nižšej úrovne.
Operácie Git
pridať, potvrdiť, zobraziť stav, zobraziť rozdiely, zlúčiť, prejsť na inú vetvu, obnoviť, odložiť zmeny, vybrať commit, vrátiť zmeny, prebaseovať, zobraziť pôvodcu, vyhľadávať.
CLI
22 príkazov v štýle git vrátane init, log, status, diff, add, commit, branch, merge, stash, blame a grep. Clone, fetch a push sú dostupné iba v knižnici.
Testované podľa referenčnej implementácie
Scenáre 761 porovnávajú výsledky s výstupom zachyteným zo skutočného git a spúšťajú sa v CI; 605 pochádzajú z testovacích súborov samotného git, libgit2, go-git, isomorphic-git, dulwich a JGit.
Úplné vyhľadávanie
Blame, grep, bisect, notes a filter ciest v logu bez spúšťania git v shelli.
Prečo Pitmaster
Funguje bez inštalácie git
Commity, rozdiely, stav a história sa počítajú v PHP, takže kontajnery a hostiteľské systémy bez binárneho súboru git môžu stále pracovať s repozitármi.
Objekty bez procesov
Pitmaster::processFreeOptions() vypne hooky, hooky fsmonitor, clone, fetch, push a prenos cez proces SSH. Lokálne čítanie a zapisovanie zostáva funkčné.
Overené oproti git
Integračné testy sa spúšťajú oproti binárnemu súboru git a matica podpory počíta 146 funkcií 146 v rozsahu ako overené podľa referenčnej implementácie, v rámci deklarovaného rozsahu zhody.
SHA-1 a SHA-256
Vytvorte repozitár SHA-256 pomocou Pitmaster::init($path, 'sha256') alebo príkazu init --object-format=sha256. Súbory pack sa čítajú aj zapisujú; súbory commit-graph, multi-pack index a reftable možno čítať.
V porovnaní s
Ďalšie spôsoby práce s repozitármi Git z PHP a rozdiely oproti Pitmaster.
| Nástroj | V čom vyniká | Rozdiel oproti Pitmaster |
|---|---|---|
| git (príkazový riadok) | V čom vynikáReferenčná implementácia s bohatou sadou príkazov, ktorá pokrýva operácie vyššej úrovne aj plný prístup k interným častiam. | Rozdiel oproti PitmasterPitmaster beží v procese PHP a základné operácie nespúšťajú git v shelli. Jeho CLI napodobňuje iba podmnožinu príkazov git. |
| czproject/git-php | V čom vynikáKompaktný PHP API na init, clone, commit, merge, vetvy, značky a vzdialené repozitáre. Funguje na PHP 8.0 alebo novšom a používa nainštalovaného klienta git. | Rozdiel oproti PitmasterPitmaster pri základných operáciách nepotrebuje klienta git, pretože objekty, súbory pack a index číta aj zapisuje samostatne. Vyžaduje PHP 8.2 alebo novší. |
| gitonomy/gitlib | V čom vynikáPrístup k repozitáru z PHP 8.4 alebo novšieho bez potreby čokoľvek zostavovať. Funguje pomocou volaní git cez shell. | Rozdiel oproti PitmasterPitmaster pri základných operáciách nevolá shell a objekt bez procesov vypne časti, ktoré by spúšťali proces. |
| libgit2 | V čom vynikáPrenositeľná implementácia základných metód Git v jazyku C ako prepojiteľná knižnica s väzbami pre Ruby, .NET, Python, Node.js, Rust a ďalšie jazyky. | Rozdiel oproti PitmasterPitmaster je čisté PHP nainštalované pomocou Composer, bez skompilovanej knižnice či FFI. Zo zdrojov testov libgit2 preberá 63 scenárov referenčnej implementácie. |
Zdroje, overené
Otázky a odpovede
Stručné odpovede z dokumentácie Pitmaster.
Nie. Základné operácie s repozitárom nepoužívajú binárny súbor git ani FFI. Objekty, referencie, súbory pack, index aj inteligentné HTTP spracúva PHP.
Áno. Pri otváraní repozitára zadajte Pitmaster::processFreeOptions() alebo ['processes' => false]. Hooky, clone, fetch, push aj prenos cez proces SSH sa potom vypnú, lokálne čítanie a zapisovanie však zostane dostupné.
Áno, hooky sú predvolene povolené a spúšťajú sa cez proc_open(). Zadajte ['hooks' => false] do Pitmaster::open(), Pitmaster::init() alebo Pitmaster::clone(), aby sa pre daný objekt nespúšťali skripty v .git/hooks.
Pitmaster::clone(), fetch() a push() používajú SSH pre adresy URL SSH a inak inteligentné HTTP; pri zlyhaní inteligentnej výmeny sa pri klonovaní a načítaní použije jednoduché HTTP. SSH používa rozšírenie ssh2, ak je načítané, a inak systémový binárny súbor ssh.
Áno. Ako druhý argument príkazu Pitmaster::init() zadajte 'sha256' alebo spustite init s parametrom --object-format=sha256. Objekty potom používajú 64-znakové haše.
Nie. Napodobňuje podmnožinu príkazov git, napríklad log, status, diff, commit, merge, blame a grep. Clone, fetch a push sú dostupné iba cez PHP API.
Začnite príručkou pre začiatočníkov a otvorte svoj prvý repozitár z PHP. Potom si pozrite referencie API a CLI.