Ugrás a tartalomhoz

Bevezetés

Az Pitmaster egy tisztán PHP-alapú könyvtár, amely natívan olvassa és írja az Git tárolókat. Az alapvető tárolóműveletekhez nem futtatja a git binárist, és nem használ FFI-t. Az Git objektummodell, a pack fájlformátum, az indexformátum és az intelligens HTTP átvitel megvalósítása PHP nyelven készült.

Miért készült az Pitmaster

Az PHP alkalmazások, amelyek Git adattárakkal dolgoznak, általában parancssori hívással indítják el a git bináris fájlt. Ez működik, de szigorú függőséget teremt: a git telepítése szükséges, biztonsági aggályokat vet fel az exec() és az proc_open() kapcsán, valamint megnehezíti az alkalmazás telepítését korlátozott környezetekben (git nélküli konténerekben, megosztott tárhelyen és szerver nélküli függvényekben).

Az Pitmaster megszünteti az git-függőséget az alapvető tárolóműveleteknél. Az PHP-alkalmazás commitelőzményeket olvashat be, commitokat hozhat létre, különbségeket számíthat ki, állapotot ellenőrizhet, és intelligens HTTP használatával küldhet adatokat távoli tárolókba, mindezt kizárólag az PHP beépített függvényeivel. Kivételt jelentenek a hookok és a SSH átvitel: mindkettő folyamatokat indít el, és mindkettő kikapcsolható tárolókezelőnként (lásd: Hookok).

Mit tud

  • Laza objektumok (blob, tree, commit, tag) olvasása és írása
  • Pack fájlok olvasása és a delta-láncok feloldása (OFS_DELTA és REF_DELTA)
  • Pack fájlok írása hálózati műveletekhez
  • Az index és az előkészítési terület olvasása és írása (v2, v3, v4 formátumok)
  • Hivatkozások olvasása és írása (ágak, címkék, HEAD, packed-refs, reftable)
  • Különbségek kiszámítása (Myers, Patience, Histogram és Minimal algoritmusokkal), git egységes formátumában
  • Háromutas összevonások végrehajtása ütközésfelismeréssel
  • Commitgráfok bejárása (napló, leszármazás, összevonási alap)
  • Az Git intelligens HTTP protokoll használata (klónozás, lekérés, feltöltés)
  • Munkafák, almodulok, stash, hookok és Git LFS támogatása

Követelmények

  • PHP 8.2 vagy újabb
  • zlib kiterjesztés (szinte minden PHP-telepítésben beépített)
  • json kiterjesztés
  • mbstring kiterjesztés (az composer.json csomagban deklarálva, ezért az Composer telepítéskor megköveteli)
  • ctype kiterjesztés (objektumhash-ek ellenőrzéséhez; a legtöbb PHP buildben engedélyezve, de az composer.json csomagban nincs deklarálva)

Az alapvető tárolóműveletekhez nincs szükség a git binárisra. Az opcionális funkciókhoz további futásidejű képességekre lehet szükség: a hookok végrehajtásához a proc_open() szükséges, a SSH átvitel pedig a ext-ssh2-t használja, ha be van töltve; egyébként a rendszer a proc_open() segítségével indítja el a rendszer ssh binárisát.

Gyors példa

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

Kezdje az Első lépések résszel, majd a többi funkcióhoz használja a API, a CLI és a Műveletek oldalakat. A Tesztelés leírja, hogyan ellenőrzi a rendszer az Pitmaster működését az git alapján.