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.
composer require pitmaster/pitmasterLegújabb kiadás v0.2.11 MIT PHP 8.2+
# List all branches (current marked with *)
./bin/pitmaster branch
# Create a new branch from HEAD
./bin/pitmaster branch feature/new-thing
# Delete a branch
./bin/pitmaster branch -d feature/old
./bin/pitmaster branch -D feature/oldA 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.
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";
}./vendor/bin/pitmaster log
./vendor/bin/pitmaster status
./vendor/bin/pitmaster diff
./vendor/bin/pitmaster show HEAD
./vendor/bin/pitmaster add file.txt
./vendor/bin/pitmaster commit -m "message"
./vendor/bin/pitmaster branch feature
./vendor/bin/pitmaster checkout feature
./vendor/bin/pitmaster merge featureNincs 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.
| Eszköz | Amiben jó | Különbségek Pitmaster-hoz képest |
|---|---|---|
| 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. |
Források, bejelölve
Kérdések és válaszok
Rövid válaszok a Pitmaster dokumentációjából.
Nem. Az alapvető tárolóműveletekhez nincs szükség git binárisra vagy FFI-re. Az objektumokat, hivatkozásokat, csomagfájlokat, indexet és smart HTTP protokollt a PHP kezeli.
Igen. A tároló megnyitásakor add át a Pitmaster::processFreeOptions() értéket vagy a ['processes' => false] beállítást. Ekkor a horgok, a klónozás, a lekérés, a feltöltés és a SSH folyamatátvitel letiltódik, a helyi olvasás és írás viszont továbbra is elérhető.
Igen, a horgok alapértelmezés szerint engedélyezve vannak, és a proc_open() segítségével futnak. Add át a ['hooks' => false] értéket az Pitmaster::open(), Pitmaster::init() vagy Pitmaster::clone() számára, ha ki szeretnéd hagyni az adott kezelőhöz tartozó .git/hooks szkripteket.
Az Pitmaster::clone(), fetch() és push() az SSH protokollt használja a SSH URL-ekhez, egyébként pedig a smart HTTP protokollt; ha a smart adatcsere nem sikerül, a klónozás és a lekérés a dumb HTTP protokollra vált. Az SSH betöltött ssh2 kiterjesztés esetén azt használja, egyébként pedig a rendszer ssh binárisát.
Igen. Add át a 'sha256' értéket második argumentumként az Pitmaster::init() számára, vagy futtasd az init parancsot --object-format=sha256 kapcsolóval. Az objektumok hash-ei ekkor 64 karakteresek.
Nem. A git-parancsok egy részét utánozza, például a log, status, diff, commit, merge, blame és grep parancsokat. A klónozás, lekérés és feltöltés csak a PHP API segítségével érhető el.
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.