Siirry sisältöön

Johdanto

Pitmaster on puhdas PHP-kirjasto, joka lukee ja kirjoittaa Git-tietovarastoja natiivisti. Tietovaraston ydintoiminnoissa ei kutsuta git-binääritiedostoa komentotulkista eikä käytetä FFI:tä. Git-objektimalli, pakettitiedostomuoto, hakemistomuoto ja älykäs HTTP-siirtotapa on toteutettu kielellä PHP.

Miksi Pitmaster on olemassa

PHP-sovellukset, jotka käsittelevät Git-tietovarastoja, kutsuvat yleensä git-binääritiedostoa komentotulkista. Tämä toimii, mutta luo tiukan riippuvuuden siitä, että git on asennettu, aiheuttaa turvallisuusriskejä, jotka liittyvät arvoihin exec() ja proc_open(), ja vaikeuttaa sovelluksen käyttöönottoa rajoitetuissa ympäristöissä (säiliöissä ilman gitiä, jaetussa ylläpitopalvelussa ja palvelimettomissa funktioissa).

Pitmaster poistaa git-riippuvuuden tietovaraston ydintoiminnoista. PHP-sovelluksesi voi lukea commit-historiaa, luoda commiteja, laskea eroja, tarkistaa tilan ja puskea etävarastoihin älykkään HTTP-protokollan kautta käyttämällä vain PHPn sisäänrakennettuja funktioita. Hookit ja SSH-siirto ovat poikkeuksia: molemmat käynnistävät prosesseja, ja kummankin voi poistaa käytöstä tietovaraston kahvakohtaisesti (katso Hookit).

Mitä se tekee

  • Lukee ja kirjoittaa irrallisia objekteja (blob, tree, commit, tag)
  • Lukee pakettitiedostoja ja ratkaisee deltaketjuja (OFS_DELTA ja REF_DELTA)
  • Kirjoittaa pakettitiedostoja verkkotoimintoja varten
  • Lukee ja kirjoittaa indeksiä/staging-aluetta (muodoissa v2, v3, v4)
  • Lukee ja kirjoittaa viitteitä (haarat, tagit, HEAD, packed-refs, reftable)
  • Laskee erot gitin yhtenäisessä muodossa käyttäen Myers-, Patience-, Histogram- ja Minimal-algoritmeja
  • Suorittaa kolmitieyhdistämisiä ja tunnistaa ristiriidat
  • Käy commit-graafeja läpi (loki, periytyminen, yhdistämiskanta)
  • Käyttää Gitn älykästä HTTP-protokollaa (kloonaus, nouto, push)
  • Tukee työpuita, aliprojekteja, stash-toimintoa, hookeja ja Git LFS:tä

Vaatimukset

  • PHP 8.2 tai uudempi
  • zlib-laajennus (sisältyy lähes kaikkiin PHP-asennuksiin)
  • json-laajennus
  • mbstring-laajennus (ilmoitettu tiedostossa composer.json, joten Composer tarvitsee sen asennuksen yhteydessä)
  • ctype-laajennus (käytetään objektitiivisteiden vahvistamiseen; käytössä useimmissa PHP-koosteissa, mutta sitä ei ole ilmoitettu tiedostossa composer.json)

Tietovaraston ydintoiminnot eivät tarvitse git-binääritiedostoa. Valinnaiset ominaisuudet voivat vaatia lisäominaisuuksia suoritusaikana: hookien suoritus käyttää proc_open():tä, ja SSH-siirto käyttää ext-ssh2:a, jos se on ladattuna; muussa tapauksessa se käynnistää järjestelmän ssh-binääritiedoston proc_open()n kautta.

Pikaesimerkki

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

Aloita kohdasta Aloitus ja tutustu sitten muihin toimintoihin kohdissa API, CLI ja Toiminnot. Kohdassa Testaus kerrotaan, miten Pitmaster testataan suhteessa tuotteeseen git.