Introduktion
Pitmaster är ett rent PHP-bibliotek som läser och skriver Git-repon direkt. Centrala repooperationer anropar inte binärfilen git via skalet och använder inte FFI. Objektmodellen Git, pack-filformatet, indexformatet och smart HTTP-transporten är implementerade i PHP.
Varför Pitmaster finns
PHP-applikationer som arbetar med Git-repon anropar vanligtvis binärfilen git via skalet. Det fungerar, men skapar ett hårt beroende av att git är installerat, medför säkerhetsproblem kring exec() och proc_open() och gör applikationen svårare att driftsätta i begränsade miljöer (containrar utan git, delad hosting, serverlösa funktioner).
Pitmaster tar bort beroendet av git för centralt repoarbete. Din PHP-applikation kan läsa commit-historik, skapa commits, beräkna diffar, kontrollera status och skicka ändringar till fjärrservrar via smart HTTP med enbart de inbyggda funktionerna i PHP. Hooks och transporten SSH är undantagen: båda startar processer och kan stängas av per repo-handtag (se Hooks).
Vad det gör
- Läser och skriver lösa objekt (blob, tree, commit, tag)
- Läser pack-filer och löser deltakedjor (OFS_DELTA och REF_DELTA)
- Skriver pack-filer för nätverksåtgärder
- Läser och skriver indexet och stagingområdet (formaten v2, v3, v4)
- Läser och skriver referenser (grenar, taggar, HEAD, packed-refs, reftable)
- Beräknar diffar (algoritmerna Myers, Patience, Histogram och Minimal) i det enhetliga formatet för git
- Utför trevägssammanslagningar med konfliktdetektering
- Går igenom commit-grafer (logg, härkomst, merge-bas)
- Använder smart Git-HTTP-protokoll (kloning, hämtning, push)
- Har stöd för arbetsträd, undermoduler, stash, hooks och Git LFS
Vad det kräver
- PHP 8.2 eller senare
- Tillägget
zlib(inbyggt i praktiskt taget alla PHP-installationer) - Tillägget
json - Tillägget
mbstring(deklarerat icomposer.json, så Composer kräver det vid installationen) - Tillägget
ctype(används för att validera objekthashar; aktiverat i de flesta PHP-byggen, men inte deklarerat icomposer.json)
Centrala repooperationer kräver inte binärfilen git. Valfria funktioner kan behöva ytterligare körningsfunktioner: hook-körning använder proc_open(), och transporten SSH använder ext-ssh2 när det är laddat och startar annars systemets binärfil ssh via proc_open().
Snabbexempel
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');
Börja med Kom igång och använd sedan API, CLI och Åtgärder för resten av funktionerna. Testning beskriver hur Pitmaster testas mot git.