Pereiti prie turinio

Įvadas

Pitmaster yra gryna PHP biblioteka, kuri savaime skaito ir rašo Git saugyklas. Pagrindinės saugyklos operacijos nevykdo išorinių komandų per git dvejetainį failą ir nenaudoja FFI. Git objektų modelis, paketų failų formatas, indekso formatas ir išmanusis HTTP transportas įgyvendinti PHP.

Kodėl sukurta Pitmaster

PHP programos, sąveikaujančios su Git saugyklomis, paprastai vykdo išorinį git dvejetainį failą. Tai veikia, tačiau reikalauja, kad būtų įdiegta git, kelia saugumo problemų, susijusių su exec() ir proc_open(), ir apsunkina programos diegimą apribotose aplinkose (konteineriuose be git, bendrojo naudojimo priegloboje, serverless funkcijose).

Pitmaster panaikina git priklausomybę atliekant pagrindines saugyklos operacijas. Jūsų PHP programa gali skaityti įrašų istoriją, kurti įrašus, apskaičiuoti skirtumus, tikrinti būseną ir siųsti pakeitimus į nuotolines saugyklas per išmanųjį HTTP, naudodama tik įtaisytąsias PHP funkcijas. Išimtys yra hook ir SSH transportas: abu paleidžia procesus, o abu galima išjungti kiekvienai saugyklos nuorodai atskirai (žr. Hook).

Ką jis daro

  • Skaito ir rašo palaidus objektus (blob, tree, commit, tag)
  • Skaito paketų failus ir išsprendžia deltų grandines (OFS_DELTA ir REF_DELTA)
  • Rašo paketų failus tinklo operacijoms
  • Skaito ir rašo indeksą / paruošimo sritį (v2, v3, v4 formatus)
  • Skaito ir rašo nuorodas (šakas, žymas, HEAD, packed-refs, reftable)
  • Apskaičiuoja skirtumus git unifikuotu formatu naudodamas Myers, Patience, Histogram ir Minimal algoritmus
  • Atlieka trijų krypčių suliejimus ir aptinka konfliktus
  • Pereina įrašų grafus (žurnalą, kilmę, bendrą suliejimo pagrindą)
  • Palaiko išmanųjį Git HTTP protokolą (klonavimą, gavimą, siuntimą)
  • Palaiko darbinius medžius, submodulius, atidėjimą, hook ir Git LFS

Ko reikia

  • PHP 8.2 arba naujesnė versija
  • zlib plėtinys (įtaisytas beveik visose PHP instaliacijose)
  • json plėtinys
  • mbstring plėtinys (deklaruotas faile composer.json, todėl Composer jo reikalauja diegimo metu)
  • ctype plėtinys (naudojamas objektų maišoms tikrinti; įjungtas daugumoje PHP versijų, bet nedeklaruotas faile composer.json)

Pagrindinėms saugyklos operacijoms nereikia git dvejetainio failo. Pasirinktinėms funkcijoms gali prireikti papildomų vykdymo aplinkos galimybių: hook vykdymui naudojamas proc_open(), o SSH transportas naudoja ext-ssh2, jei jis įkeltas, o kitu atveju per proc_open() paleidžiamas sistemos ssh dvejetainis failas.

Trumpas pavyzdys

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');

Pradėkite nuo Darbo pradžia, o likusias galimybes rasite skiltyse API, CLI ir Operacijos. Skiltyje Testavimas paaiškinta, kaip Pitmaster tikrinama pagal git.