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
zlibkiterjesztés (szinte minden PHP-telepítésben beépített)jsonkiterjesztésmbstringkiterjesztés (azcomposer.jsoncsomagban deklarálva, ezért az Composer telepítéskor megköveteli)ctypekiterjesztés (objektumhash-ek ellenőrzéséhez; a legtöbb PHP buildben engedélyezve, de azcomposer.jsoncsomagban 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
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.