Pitmaster
Git v PHP: branje in zapisovanje repozitorijev, primerjanje, združevanje in komunikacija prek pametnega HTTP brez zagona zunanjega programa git.
composer require pitmaster/pitmasterNajnovejša izdaja 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 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.
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 featureBrez 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.
| Orodje | Primerno za | Razlika v primerjavi z Pitmaster |
|---|---|---|
| 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.
Ne. Osnovne operacije v repozitoriju ne uporabljajo binarne datoteke git ali FFI. Objekti, reference, datoteke pack, indeks in pametni HTTP se obdelujejo v PHP.
Da. Pri odpiranju repozitorija podajte Pitmaster::processFreeOptions() ali ['processes' => false]. S tem onemogočite kavlje, clone, fetch, push in prenos prek procesov SSH, lokalno branje in zapisovanje pa ostaneta na voljo.
Da, kavlji so privzeto omogočeni in se izvajajo prek proc_open(). Podajte ['hooks' => false] funkciji Pitmaster::open(), Pitmaster::init() ali Pitmaster::clone(), da za to ročico preskočite skripte v .git/hooks.
Pitmaster::clone(), fetch() in push() uporabljajo SSH za URL-je SSH, sicer pa pametni HTTP. Če pametna izmenjava ne uspe, clone in fetch preideta na neinteligentni HTTP. SSH uporablja razširitev ssh2, če je naložena, sicer pa sistemsko binarno datoteko ssh.
Da. Kot drugi argument funkcije Pitmaster::init() podajte 'sha256' ali zaženite init z --object-format=sha256. Zgoščene vrednosti objektov bodo dolge 64 znakov.
Ne. Odraža podmnožico ukazov git, kot so log, status, diff, commit, merge, blame in grep. Clone, fetch in push so na voljo le prek PHP API.
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.