Preskoči na vsebino

Pitmaster

Git v PHP: branje in zapisovanje repozitorijev, primerjanje, združevanje in komunikacija prek pametnega HTTP brez zagona zunanjega programa git.

Terminal
composer require pitmaster/pitmaster

Najnovejša izdaja v0.2.11 MIT PHP 8.2+

V praksi

Odprite repozitorij, nato ga berite in zapisujte s klici metod ali iz lupine.

Branje repozitorija iz PHP

Pitmaster::open() poišče imenik .git in vrne ročaj repozitorija. Vsak vnos stanja vsebuje ločeno stanje za indeks in delovno drevo.

Iz lupine ./vendor/bin/pitmaster posnema podmnožico ukazov git in deluje po namestitvi Composer, saj je 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";
}

Brez binarnega programa git

Osnovne operacije se izvajajo v PHP 8.2+ brez binarnega programa git ali FFI. Kavlji in nadomestna možnost SSH zaženejo procese, razen če podate ['hooks' => false] ali processFreeOptions().

Branje in zapisovanje

Razvezani objekti, paketne datoteke z razreševanjem delt, indeks, sklici in konfiguracija. git bere tisto, kar Pitmaster zapiše za različici indeksa 2 in 3 ter razvezane sklice.

Primerjanje in združevanje

Primerjave Myers, patience in histogram z zaznavanjem preimenovanj. Trosmerno združevanje z označevalniki sporov.

Omrežni protokol

Kloniranje, pridobivanje in potiskanje prek pametnega HTTP ali SSH, z nadomestno možnostjo dumb HTTP za kloniranje in pridobivanje. Protokol v2 je na voljo prek odjemalcev nižje ravni.

Operacije Git

dodajanje, commit, stanje, razlika, združevanje, prevzem veje, ponastavitev, začasna shranitev, izbor posameznega commita, povrnitev, ponovna osnova, pripis avtorja, iskanje.

CLI

22 ukazov v slogu git, vključno z init, log, status, diff, add, commit, branch, merge, stash, blame in grep. Clone, fetch in push so na voljo samo v knjižnici.

Preverjeno z oracle

Scenariji 761 primerjajo rezultate z izhodom, zajetim iz pravega git, in se izvajajo v CI; 605 izvirajo iz testnih zbirk samega git, libgit2, go-git, isomorphic-git, dulwich in JGit.

Celovito iskanje

Blame, grep, bisect, notes in filter dnevnika po poti brez zagona zunanjega programa git.

Zakaj Pitmaster

Deluje brez namestitve git

Potrditve, primerjave, stanje in zgodovina se izračunajo v PHP, zato lahko s kontejnerji in gostitelji brez binarnega programa git še vedno delate z repozitoriji.

Ročaji brez procesov

Pitmaster::processFreeOptions() izklopi kavlje, kavlje fsmonitor, clone, fetch, push in prenos prek procesa SSH. Lokalno branje in zapisovanje še naprej delujeta.

Preverjeno glede na git

Integracijski testi se izvajajo z binarno datoteko git, matrika podpore pa šteje 146 od 146 funkcij v obsegu kot preverjenih z referenčno implementacijo znotraj deklariranega obsega združljivosti.

SHA-1 in SHA-256

Ustvarite repozitorij SHA-256 z Pitmaster::init($path, 'sha256') ali uporabite init --object-format=sha256. Datoteke pack se berejo in zapisujejo; datoteke commit-graph, multi-pack index in reftable je mogoče brati.

V primerjavi z

Drugi načini dela z repozitoriji Git iz PHP in razlike, ki jih prinaša Pitmaster.

Pitmaster v primerjavi z drugimi orodji
git (ukazna vrstica) Primerno zaReferenčna implementacija z obsežnim naborom ukazov, ki pokriva operacije na visoki ravni in poln dostop do notranjih funkcij. Razlika v primerjavi z PitmasterPitmaster se izvaja znotraj procesa PHP, osnovne operacije pa ne kličejo lupine za zagon git. Njegov CLI odraža le podmnožico ukazov git.
czproject/git-php Primerno zaKompakten PHP API za init, clone, commit, merge, branches, tags in remotes. Deluje v PHP 8.0 ali novejši različici in upravlja nameščenega odjemalca git. Razlika v primerjavi z PitmasterPitmaster za osnovne operacije ne potrebuje odjemalca git, ker sam bere in zapisuje objekte, datoteke pack ter indeks. Zahteva PHP 8.2 ali novejšo različico.
gitonomy/gitlib Primerno zaDostop do repozitorija iz PHP 8.4 ali novejše različice brez potrebe po gradnji. Deluje tako, da izvaja klice lupine za git. Razlika v primerjavi z PitmasterPitmaster za osnovne operacije ne izvaja klicev lupine, ročica brez procesa pa onemogoči dele, ki bi zagnali proces.
libgit2 Primerno zaPrenosljiva implementacija osnovnih metod Git v jeziku C kot povezljiva knjižnica z vezavami za Ruby, .NET, Python, Node.js, Rust in druge jezike. Razlika v primerjavi z PitmasterPitmaster je navadna koda PHP, nameščena z Composer, brez prevedene knjižnice ali FFI. Iz testnih virov libgit2 uvozi 63 scenarijev za preverjanje z referenčno implementacijo.

Vprašanja in odgovori

Kratki odgovori iz dokumentacije za Pitmaster.

Začnite z vodnikom za prve korake in odprite prvi repozitorij iz PHP, nato pa si oglejte še referenčna priročnika za API in CLI.