Treci la conținut

Pitmaster

Git în PHP: citește și scrie depozite, compară, comasează și comunică prin protocolul inteligent HTTP, fără a apela git din shell.

Terminal
composer require pitmaster/pitmaster

Cea mai recentă versiune v0.2.11 MIT PHP 8.2+

În practică

Deschideți un depozit, apoi citiți-l și scrieți în el prin apeluri de metode sau din shell.

Citirea unui depozit din PHP

Pitmaster::open() localizează directorul .git și returnează un handle către depozit. Fiecare intrare de stare are o stare separată pentru index și arborele de lucru.

Din shell, ./vendor/bin/pitmaster reproduce un subset de comenzi git și funcționează cu o instalare Composer, deoarece 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";
}

Fără binarul git

Operațiile de bază rulează în PHP 8.2+ fără binarul git sau FFI. Hookurile și alternativa SSH pornesc procese, dacă nu transmiteți ['hooks' => false] sau processFreeOptions().

Citire și scriere

Obiecte libere, fișiere pack cu rezolvarea delta, index, referințe și configurație. git citește ce scrie Pitmaster pentru versiunile 2 și 3 ale indexului și referințele libere.

Comparare și comasare

Comparații Myers, patience și histogram cu detectarea redenumirilor. Comasare în trei direcții cu marcaje de conflict.

Protocol de rețea

Clonare, preluare și trimitere prin HTTP inteligent sau SSH, cu o alternativă HTTP simplă pentru clonare și preluare. Protocolul v2 este disponibil prin clienții de nivel inferior.

Operații Git

adăugare, commit, stare, diferență, comasare, schimbare de ramură, resetare, punere deoparte, alegere selectivă, revenire, rearanjare, identificare autor, căutare.

CLI

22 de comenzi în stilul git, inclusiv init, log, status, diff, add, commit, branch, merge, stash, blame și grep. Clone, fetch și push sunt disponibile doar în bibliotecă.

Testat cu oracle

761 de scenarii compară rezultatele cu ieșirea capturată dintr-un git real și rulează în CI; 605 provin din suitele de teste ale git, libgit2, go-git, isomorphic-git, dulwich și JGit.

Căutare completă

blame, grep, bisect, notes și filtru de cale pentru jurnal, fără a apela git din shell.

De ce Pitmaster

Funcționează fără instalarea git

Commiturile, diferențele, starea și istoricul sunt calculate în PHP, astfel încât containerele și gazdele fără un binar git pot lucra cu depozite.

Handle-uri fără procese

Pitmaster::processFreeOptions() dezactivează hookurile, hookurile fsmonitor, clonarea, preluarea, trimiterea și transportul de procese SSH. Citirea și scrierea locală continuă să funcționeze.

Verificat în raport cu git

Testele de integrare rulează pe binarul git, iar matricea de compatibilitate numără 146 dintre 146 funcționalități incluse în domeniul evaluat, verificate cu oracle în limitele de compatibilitate declarate.

SHA-1 și SHA-256

Creați un depozit SHA-256 cu Pitmaster::init($path, 'sha256') sau init --object-format=sha256. Fișierele pack pot fi citite și scrise; fișierele commit-graph, multi-pack index și reftable pot fi citite.

Comparativ cu

Alte modalități de a lucra cu depozite Git din PHP și diferențele aduse de Pitmaster.

Pitmaster în comparație cu alte instrumente
git (linie de comandă) Potrivit pentruImplementarea de referință, cu un set bogat de comenzi care acoperă atât operațiunile de nivel înalt, cât și accesul complet la componentele interne. Diferența față de PitmasterPitmaster rulează în procesul PHP, iar operațiunile de bază nu apelează git prin shell. CLI reproduce doar un subset al comenzilor git.
czproject/git-php Potrivit pentruUn PHP API compact pentru init, clone, commit, merge, branches, tags și remotes. Rulează pe PHP 8.0 sau o versiune ulterioară și folosește clientul git instalat. Diferența față de PitmasterPitmaster nu are nevoie de un client git pentru operațiunile de bază, deoarece citește și scrie singur obiectele, fișierele pack și indexul. Necesită PHP 8.2 sau o versiune ulterioară.
gitonomy/gitlib Potrivit pentruAcces la depozit din PHP 8.4 sau o versiune ulterioară, fără să fie nevoie de compilare. Funcționează apelând git prin shell. Diferența față de PitmasterPitmaster nu apelează shell-ul pentru operațiunile de bază, iar un handle fără proces dezactivează componentele care ar porni un proces.
libgit2 Potrivit pentruO implementare C portabilă a metodelor de bază Git, sub forma unei biblioteci care poate fi legată, cu bindings pentru Ruby, .NET, Python, Node.js, Rust și altele. Diferența față de PitmasterPitmaster este cod PHP simplu, instalat cu Composer, fără bibliotecă compilată sau FFI. Importă 63 de scenarii oracle din resursele de testare ale libgit2.

Întrebări și răspunsuri

Răspunsuri scurte din documentația Pitmaster.

Începeți cu ghidul introductiv pentru a deschide primul depozit din PHP, apoi consultați referințele API și CLI pentru restul.