Sissejuhatus
Pitmaster on puhas PHP teek, mis loeb ja kirjutab Git hoidlaid otse. Hoidla põhitoimingud ei käivita käsurealt git binaari ega kasuta FFI-d. Git objektimudel, pakifailivorming, registrivorming ja nutikas HTTP-transport on teostatud PHP-is.
Miks Pitmaster olemas on
PHP rakendused, mis kasutavad Git hoidlaid, käivitavad tavaliselt käsurealt git binaari. See toimib, kuid tekitab tugeva sõltuvuse sellest, et git oleks installitud, toob kaasa turvariske seoses exec() ja proc_open()-iga ning raskendab rakenduse juurutamist piiratud keskkondades (konteinerid, kus git puudub, jagatud majutus, serverita funktsioonid).
Pitmaster kõrvaldab hoidla põhitoimingute jaoks sõltuvuse paketist git. Teie PHP-rakendus saab lugeda sissekannete ajalugu, luua sissekandeid, arvutada erinevusi, kontrollida olekut ja saata muudatusi kaughoidlatesse nutika HTTP kaudu, kasutades ainult PHP sisseehitatud funktsioone. Erandiks on hookid ja SSH-transport: mõlemad käivitavad protsesse ning mõlemad saab hoidlakäepideme kaupa välja lülitada (vt Hookid).
Mida see teeb
- Loeb ja kirjutab lahtisi objekte (blob, puu, sissekanne, silt)
- Loeb pakifaile ja lahendab delta-ahelaid (OFS_DELTA ja REF_DELTA)
- Kirjutab võrgutoimingute jaoks pakifaile
- Loeb ja kirjutab registrit/lavastusala (vormingud v2, v3, v4)
- Loeb ja kirjutab viiteid (harud, sildid, HEAD, packed-refs, reftable)
- Arvutab erinevusi (Myersi, Patience'i, Histogrammi ja Minimal algoritmidega) giti ühtses vormingus
- Teeb kolmesuunalisi liitmisi ja tuvastab konfliktid
- Läbib sissekannete graafe (logi, eellasus, liitmise alus)
- Kasutab Git nutikat HTTP-protokolli (klooni, too, saada)
- Toetab tööpuid, alamooduleid, riiuldamist, hooke ja Git LFS-i
Nõuded
- PHP 8.2 või uuem
- Laiendus
zlib(sisseehitatud peaaegu kõigis PHP paigaldustes) - Laiendus
json - Laiendus
mbstring(deklareeritud failiscomposer.json, seega nõuab Composer seda installimise ajal) - Laiendus
ctype(kasutatakse objektiräside valideerimiseks; enamikus PHP järgudes lubatud, kuid failiscomposer.jsondeklareerimata)
Hoidla põhitoimingud ei vaja binaari git. Valikulised funktsioonid võivad vajada täiendavaid käituskeskkonna võimalusi: hookide käivitamiseks kasutatakse proc_open()-i ning transport SSH kasutab laadimise korral ext-ssh2-i, muul juhul käivitab see süsteemi binaari ssh programmi proc_open() kaudu.
Kiire näide
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');
Alustage jaotisest Alustamine, seejärel tutvuge ülejäänud võimalustega jaotistes API, CLI ja Toimingud. Jaotis Testimine selgitab, kuidas kontrollitakse, et Pitmaster vastab git-ile.