Pitmaster
Git v PHP: čtení a zápis repozitářů, diff, merge a komunikace pomocí smart HTTP bez spouštění git v shellu.
composer require pitmaster/pitmasterNejnovější vydání 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/oldV praxi
Otevřete repozitář a pak jej čtěte a zapisujte pomocí volání metod nebo z příkazového řádku.
Čtení repozitáře z PHP
Pitmaster::open() najde adresář .git a vrátí odkaz na repozitář. Každá položka stavu má oddělený stav pro index a pracovní strom.
Z příkazového řádku ./vendor/bin/pitmaster napodobuje podmnožinu příkazů git a funguje z instalace Composer, protože 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 featureBez binárky git
Základní operace běží v PHP 8.2+ bez binárky git nebo FFI. Hooky a náhradní řešení SSH spouštějí procesy, pokud nepředáte ['hooks' => false] nebo processFreeOptions().
Čtení a zápis
Volné objekty, pack soubory s rozbalením delt, index, reference a konfigurace. git čte to, co Pitmaster zapisuje pro verze indexu 2 a 3 a volné reference.
Diff a merge
Diff algoritmy Myers, patience a histogram s detekcí přejmenování. Třícestné sloučení se značkami konfliktů.
Síťový protokol
Klonování, načítání a odesílání přes smart HTTP nebo SSH, s náhradou v podobě dumb HTTP pro klonování a načítání. Protokol v2 je dostupný prostřednictvím nízkoúrovňových klientů.
Operace Git
přidat, potvrdit, stav, rozdíly, sloučit, přepnout, vrátit změny, odložit, vybrat změnu, vrátit commit, změnit základ, zjistit autora, hledat.
CLI
22 příkazů ve stylu git, včetně init, log, status, diff, add, commit, branch, merge, stash, blame a grep. Klonování, načítání a odesílání jsou dostupné pouze v knihovně.
Ověřeno pomocí Oracle
Scénáře 761 porovnávají výsledky s výstupem zachyceným ze skutečného git a spouštějí se v CI; 605 pocházejí z testovacích sad samotného git, libgit2, go-git, isomorphic-git, dulwich a JGit.
Kompletní vyhledávání
Blame, grep, bisect, poznámky a filtr cest v logu bez spouštění git v shellu.
Proč Pitmaster
Funguje bez instalace git
Commity, rozdíly, stav a historie se počítají v PHP, takže s repozitáři lze pracovat i v kontejnerech a na hostitelích bez binárky git.
Odkazy bez procesů
Pitmaster::processFreeOptions() vypíná hooky, hooky fsmonitor, klonování, načítání, odesílání a procesní přenos SSH. Místní čtení a zápis dál fungují.
Ověřeno proti git
Integrační testy se spouštějí proti binárce git a matice podpory uvádí 146 z 146 funkcí v rozsahu jako ověřené pomocí Oracle v rámci deklarovaného rozsahu shody.
SHA-1 a SHA-256
Vytvořte repozitář SHA-256 pomocí Pitmaster::init($path, 'sha256') nebo příkazu init --object-format=sha256. Pack soubory se čtou i zapisují; soubory commit-graph, multi-pack index a reftable lze číst.
Srovnání
Další možnosti práce s repozitáři Git z PHP a rozdíly oproti Pitmaster.
| Nástroj | Vhodné pro | Rozdíl oproti Pitmaster |
|---|---|---|
| git (příkazový řádek) | Vhodné proReferenční implementace s rozsáhlou sadou příkazů, která pokrývá vysokoúrovňové operace i plný přístup k interním částem. | Rozdíl oproti PitmasterPitmaster běží uvnitř procesu PHP a základní operace nespouštějí git v shellu. Jeho CLI napodobuje pouze podmnožinu příkazů git. |
| czproject/git-php | Vhodné proKompaktní PHP API pro init, klonování, commit, merge, větve, tagy a vzdálené repozitáře. Běží na PHP 8.0 nebo novějším a ovládá nainstalovaného klienta git. | Rozdíl oproti PitmasterPitmaster pro základní operace nepotřebuje klienta git, protože samo čte a zapisuje objekty, pack soubory a index. Vyžaduje PHP 8.2 nebo novější. |
| gitonomy/gitlib | Vhodné proPřístup k repozitáři z PHP 8.4 nebo novějšího bez nutnosti cokoli sestavovat. Funguje voláním git v shellu. | Rozdíl oproti PitmasterPitmaster při základních operacích nevolá shell a odkaz bez procesů vypíná části, které by proces spustily. |
| libgit2 | Vhodné proPřenosná implementace základních metod Git v jazyce C jako knihovna pro propojení s programem, s vazbami pro Ruby, .NET, Python, Node.js, Rust a další. | Rozdíl oproti PitmasterPitmaster je čistý PHP instalovaný pomocí Composer, bez kompilované knihovny nebo FFI. Z testovacích prostředků libgit2 přebírá 63 scénářů Oracle. |
Zdroje, zaškrtnuto
Otázky a odpovědi
Stručné odpovědi z dokumentace Pitmaster.
Ne. Základní operace s repozitářem nepoužívají binárku git ani FFI. Objekty, reference, pack soubory, index a smart HTTP zpracovává PHP.
Ano. Při otevírání repozitáře předejte Pitmaster::processFreeOptions() nebo ['processes' => false]. Hooky, klonování, načítání, odesílání a procesní přenos SSH se tím vypnou, zatímco místní čtení a zápis zůstávají dostupné.
Ano, hooky jsou ve výchozím nastavení zapnuté a spouštějí se přes proc_open(). Předejte ['hooks' => false] metodě Pitmaster::open(), Pitmaster::init() nebo Pitmaster::clone(), chcete-li pro daný odkaz přeskočit skripty v .git/hooks.
Pitmaster::clone(), fetch() a push() používají SSH pro URL SSH a jinak smart HTTP; při selhání chytré výměny se klonování a načítání vrátí k dumb HTTP. SSH používá rozšíření ssh2, pokud je načtené, a jinak systémovou binárku ssh.
Ano. Jako druhý argument metody Pitmaster::init() předejte 'sha256' nebo spusťte init s --object-format=sha256. Objekty pak používají 64znakové hashe.
Ne. Napodobuje podmnožinu příkazů git, například log, status, diff, commit, merge, blame a grep. Klonování, načítání a odesílání jsou dostupné pouze prostřednictvím PHP API.
Začněte průvodcem pro začátek a otevřete svůj první repozitář z PHP, pak se podívejte do referencí API a CLI.