Treci la conținut

Introducere

Pitmaster este o bibliotecă pură PHP care citește și scrie nativ depozite Git. Operațiile de bază asupra depozitului nu apelează executabilul git din shell și nu folosesc FFI. Modelul de obiecte Git, formatul fișierelor pack, formatul indexului și transportul smart HTTP sunt implementate în PHP.

De ce există Pitmaster

Aplicațiile PHP care interacționează cu depozite Git apelează de obicei executabilul git din shell. Funcționează, dar creează o dependență strictă de instalarea git, introduce probleme de securitate legate de exec() și proc_open() și îngreunează implementarea aplicației în medii restricționate (containere fără git, găzduire partajată, funcții serverless).

Pitmaster elimină dependența de git pentru operațiile de bază asupra depozitului. Aplicația dvs. PHP poate citi istoricul commit-urilor, crea commit-uri, calcula diferențe, verifica starea și trimite modificări către depozite la distanță prin smart HTTP, folosind numai funcțiile integrate ale PHP. Hook-urile și transportul SSH sunt excepții: ambele pornesc procese și pot fi dezactivate per instanță de depozit (consultați Hook-uri).

Ce face

  • Citește și scrie obiecte libere (blob, tree, commit, tag)
  • Citește fișiere pack și rezolvă lanțuri delta (OFS_DELTA și REF_DELTA)
  • Scrie fișiere pack pentru operațiile de rețea
  • Citește și scrie indexul/zona de staging (formatele v2, v3, v4)
  • Citește și scrie referințe (ramuri, tag-uri, HEAD, packed-refs, reftable)
  • Calculează diferențe (algoritmii Myers, Patience, Histogram și Minimal) în formatul unificat al git
  • Efectuează îmbinări în trei direcții cu detectarea conflictelor
  • Parcurge grafuri de commit-uri (jurnal, ascendență, bază de îmbinare)
  • Folosește protocolul Git smart HTTP (clonare, preluare, trimitere)
  • Acceptă worktree-uri, submodule, stash, hook-uri și Git LFS

Cerințe

  • PHP 8.2 sau o versiune ulterioară
  • Extensia zlib (integrată în aproape toate instalările PHP)
  • Extensia json
  • Extensia mbstring (declarată în composer.json, deci Composer o solicită la instalare)
  • Extensia ctype (folosită pentru validarea hash-urilor obiectelor; activată în majoritatea build-urilor PHP, dar nedeclarată în composer.json)

Operațiile de bază asupra depozitului nu necesită executabilul git. Funcțiile opționale pot necesita capabilități suplimentare ale mediului de execuție: executarea hook-urilor folosește proc_open(), iar transportul SSH folosește ext-ssh2 atunci când este încărcat; în caz contrar, pornește executabilul de sistem ssh prin proc_open().

Exemplu rapid

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";
}

// Create a commit
$repo->add('src/Feature.php');
$commitId = $repo->commit('Add new feature');

Începeți cu Noțiuni introductive, apoi consultați API, CLI și Operații pentru restul funcționalităților. Testare explică modul în care Pitmaster este verificat față de git.