Ugrás a tartalomhoz

Pitmaster

Git a PHP keretében: tárolók olvasása és írása, diffelés, egyesítés és a smart HTTP protokoll használata, git shellből történő meghívása nélkül.

Terminál
composer require pitmaster/pitmaster

Legújabb kiadás v0.2.11 MIT PHP 8.2+

A gyakorlatban

Nyiss meg egy tárolót, majd olvasd és írd a metódushívásokkal vagy a parancssorból.

Tároló beolvasása a PHP-ből

A Pitmaster::open() megkeresi a .git könyvtárat, és visszaad egy tárolókezelőt. Minden állapotbejegyzés külön állapotot tartalmaz az indexhez és a munkafához.

A parancssorból a ./vendor/bin/pitmaster a git-parancsok egy részét utánozza, és Composer telepítésből is működik, mivel a 0.2.11.

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";
}

Nincs szükség git binárisra

Az alapműveletek PHP 8.2+ alatt futnak git bináris és FFI nélkül. A horgok és a SSH tartalékmegoldása folyamatokat indít, kivéve, ha átadod a ['hooks' => false] értéket vagy a processFreeOptions() lehetőséget.

Olvasás és írás

Laza objektumok, deltafeloldással kezelt csomagfájlok, index, hivatkozások és konfiguráció. A git beolvassa azt, amit a Pitmaster ír a 2-es és 3-as indexverziókhoz, valamint a laza hivatkozásokhoz.

Diffelés és egyesítés

Myers-, patience- és hisztogram alapú diffek átnevezés-felismeréssel. Háromutas egyesítés ütközésjelölőkkel.

Hálózati protokoll

Klónozás, lekérés és feltöltés smart HTTP vagy SSH használatával, klónozáshoz és lekéréshez pedig tartalékmegoldásként dumb HTTP protokollal. A v2 protokoll az alacsonyabb szintű klienseken keresztül érhető el.

Git műveletek

hozzáadás, véglegesítés, állapot, különbség, egyesítés, kivétel, visszaállítás, elrejtés, cherry-pick, visszavonás, újraalapozás, felelőskeresés, keresés.

CLI

22 git-stílusú parancs, köztük az init, log, status, diff, add, commit, branch, merge, stash, blame és grep. A klónozás, lekérés és feltöltés csak a könyvtáron keresztül érhető el.

Oracle-tesztelt

A 761 forgatókönyvek valódi gitből rögzített kimenettel hasonlítják össze az eredményeket, és CI-ben futnak; a 605 a git, a libgit2, a go-git, az isomorphic-git, a dulwich és az JGit tesztcsomagjaiból származik.

Teljes körű keresés

Blame, grep, bisect, notes és naplóútvonal-szűrő git shellből történő meghívása nélkül.

Miért Pitmaster?

Telepítés nélkül működik: git

A commitokat, diffeket, állapotot és előzményeket a PHP számítja ki, így git bináris nélküli tárolókkal és gazdagépeken is lehet dolgozni.

Folyamatindítás nélküli kezelők

A Pitmaster::processFreeOptions() kikapcsolja a horgokat, az fsmonitor-horgokat, a klónozást, a lekérést, a feltöltést és a SSH folyamatátvitelt. A helyi olvasás és írás továbbra is működik.

git alapján ellenőrizve

Az integrációs tesztek a git binárissal futnak, a támogatási mátrix pedig az 146 hatókörbe tartozó funkciók közül 146-et számol a megadott kompatibilitási körön belül oracle-lel ellenőrzöttnek.

SHA-1 és SHA-256

Hozz létre SHA-256 tárolót a Pitmaster::init($path, 'sha256') használatával, vagy futtasd az init --object-format=sha256 parancsot. A csomagfájlok olvashatók és írhatók; a commit-graph, a multi-pack index és a reftable fájljai beolvashatók.

Összehasonlítás

A PHP segítségével más módokon is dolgozhatsz Git tárolókkal, és megtudhatod, miben tér el a Pitmaster.

Pitmaster összehasonlítása más eszközökkel
git (parancssor) Amiben jóA referenciaimplementáció bőséges parancskészlettel, amely lefedi a magas szintű műveleteket és a belső működés teljes hozzáférését. Különbségek Pitmaster-hoz képestA Pitmaster a PHP folyamaton belül fut, az alapműveletek pedig nem hívják meg a git-et shellből. A CLI csak a git-parancsok egy részét utánozza.
czproject/git-php Amiben jóTömör PHP API az init, clone, commit, merge, ágak, címkék és távoli tárolók kezelésére. PHP 8.0 vagy újabb verzión fut, és a telepített git klienst használja. Különbségek Pitmaster-hoz képestA Pitmaster alapműveleteihez nincs szükség git kliensre, mert maga olvassa és írja az objektumokat, csomagfájlokat és az indexet. A PHP 8.2 vagy újabb verziója szükséges.
gitonomy/gitlib Amiben jóTároló-hozzáférés PHP 8.4 vagy újabb verzióból, összeállítás nélkül. A git-et shellparancsokkal használja. Különbségek Pitmaster-hoz képestA Pitmaster nem indít shellparancsokat az alapműveletekhez, a folyamatindítás nélküli kezelő pedig letiltja azokat a részeket, amelyek folyamatot indítanának.
libgit2 Amiben jóA Git alaprendszer metódusainak hordozható C-implementációja linkelhető könyvtárként, Ruby-, .NET-, Python-, Node.js-, Rust- és egyéb nyelvi kötésekkel. Különbségek Pitmaster-hoz képestA Pitmaster egyszerű PHP, amely Composer használatával telepíthető; nincs hozzá lefordított könyvtár vagy FFI. Oracle-forgatókönyveinek 63 esete a libgit2 tesztforrásaiból származik.

Kérdések és válaszok

Rövid válaszok a Pitmaster dokumentációjából.

Kezdésként olvasd el az első tároló PHP-ből történő megnyitásáról szóló bevezetőt, majd használd a többihez az API és CLI referenciákat.