Pitmaster
Git i PHP: läs och skriv arkiv, beräkna diffar, sammanfoga och kommunicera via smart HTTP utan att anropa git via skalet.
composer require pitmaster/pitmasterSenaste versionen 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/oldI praktiken
Öppna ett arkiv och läs och skriv sedan i det med metodanrop eller från skalet.
Läs ett arkiv från PHP
Pitmaster::open() hittar katalogen .git och returnerar ett arkivhandtag. Varje statuspost innehåller ett separat tillstånd för indexet och arbetsträdet.
Från skalet speglar ./vendor/bin/pitmaster en delmängd av git-kommandona och fungerar med en Composer-installation eftersom 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 featureIngen git-binär
Kärnoperationerna körs i PHP 8.2+ utan git-binär eller FFI. Krokar och reservlösningen SSH startar processer om du inte skickar med ['hooks' => false] eller processFreeOptions().
Läs och skriv
Lösa objekt, packfiler med deltaupplösning, indexet, refs och konfiguration. git läser det som Pitmaster skriver för indexversionerna 2 och 3 samt lösa refs.
Diff och sammanfogning
Diffar med Myers, patience och histogram samt identifiering av namnbyten. Trevägssammanfogning med konfliktmarkörer.
Nätverksprotokoll
Klona, hämtar och skickar över smart HTTP eller SSH, med en reservlösning via dumb HTTP för kloning och hämtning. Protokoll v2 är tillgängligt via klienterna på lägre nivå.
Git-operationer
lägga till, checka in, kontrollera status, jämföra ändringar, sammanfoga, checka ut, återställa, lägga undan, tillämpa en specifik ändring, återställa en ändring, ändra bashistorik, granska skuld, söka.
CLI
22 git-liknande kommandon, inklusive init, log, status, diff, add, commit, branch, merge, stash, blame och grep. Kloning, hämtning och push finns endast i biblioteket.
Testat mot oracle
761 scenarier jämför resultat med utdata som hämtats från verkliga git och körs i CI; 605 kommer från testsviterna för git självt, libgit2, go-git, isomorphic-git, dulwich och JGit.
Fullständig sökning
Blame, grep, bisect, notes och loggfilter för sökvägar utan att anropa git via skalet.
Varför Pitmaster
Fungerar utan en git-installation
Incheckningar, diffar, status och historik beräknas i PHP, så även containrar och värdar utan en git-binär kan arbeta med arkiv.
Handtag utan processer
Pitmaster::processFreeOptions() stänger av krokar, fsmonitor-krokar, kloning, hämtning, push och processtransport via SSH. Lokala läsningar och skrivningar fungerar fortfarande.
Kontrollerat mot git
Integrationstester körs mot binären git, och supportmatrisen räknar 146 av 146 funktioner inom omfattningen som verifierade mot oracle inom den angivna paritetsomfattningen.
SHA-1 och SHA-256
Skapa ett SHA-256-arkiv med Pitmaster::init($path, 'sha256') eller init --object-format=sha256. Packfiler läses och skrivs; commit-graph-, multi-pack-index- och reftable-filer kan läsas.
Jämfört med
Andra sätt att arbeta med Git-arkiv från PHP, och vad som skiljer Pitmaster.
| Verktyg | Bra på | Skillnaden jämfört med Pitmaster |
|---|---|---|
| git (kommandorad) | Bra påReferensimplementationen, med en omfattande uppsättning kommandon som täcker både övergripande åtgärder och full åtkomst till interna funktioner. | Skillnaden jämfört med PitmasterPitmaster körs inuti processen PHP, och kärnoperationer anropar inte git via skalet. Dess CLI motsvarar bara en delmängd av kommandona i git. |
| czproject/git-php | Bra påEtt kompakt PHP-API för init, clone, commit, merge, grenar, taggar och fjärrarkiv. Det körs med PHP 8.0 eller senare och använder den installerade git-klienten. | Skillnaden jämfört med PitmasterPitmaster behöver ingen git-klient för kärnoperationer eftersom det självt läser och skriver objekt, packfiler och indexet. Det kräver PHP 8.2 eller senare. |
| gitonomy/gitlib | Bra påÅtkomst till arkiv från PHP 8.4 eller senare utan att behöva bygga något. Det fungerar genom att anropa git via skalet. | Skillnaden jämfört med PitmasterPitmaster gör inga anrop via skalet för kärnoperationer, och en processfri hanterare inaktiverar de delar som skulle starta en process. |
| libgit2 | Bra påEn portabel C-implementation av Gits kärnmetoder som ett länkbart bibliotek, med bindningar för Ruby, .NET, Python, Node.js, Rust med flera. | Skillnaden jämfört med PitmasterPitmaster är vanlig PHP installerad med Composer, utan kompilerat bibliotek eller FFI. Det importerar 63 av sina oracle-scenarier från testresurserna för libgit2. |
Frågor och svar
Korta svar från dokumentationen för Pitmaster.
Nej. Kärnoperationer för arkiv använder inte binären git eller FFI. Objekt, refs, packfiler, indexet och smarta HTTP hanteras i PHP.
Ja. Ange Pitmaster::processFreeOptions() eller ['processes' => false] när du öppnar arkivet. Hooks, clone, fetch, push och processöverföring via SSH inaktiveras då, medan lokala läsningar och skrivningar fortfarande fungerar.
Ja, hooks är aktiverade som standard och körs via proc_open(). Ange ['hooks' => false] till Pitmaster::open(), Pitmaster::init() eller Pitmaster::clone() för att hoppa över skripten i .git/hooks för den hanteraren.
Pitmaster::clone(), fetch() och push() använder SSH för SSH-URL:er och smarta HTTP i övriga fall. Om det smarta utbytet misslyckas använder clone och fetch i stället dumb HTTP. SSH använder ssh2-tillägget om det är inläst och annars systemets ssh-binär.
Ja. Ange 'sha256' som det andra argumentet till Pitmaster::init() eller kör init med --object-format=sha256. Objekt använder då 64 tecken långa hashvärden.
Nej. Det motsvarar en delmängd av kommandona i git, till exempel log, status, diff, commit, merge, blame och grep. Clone, fetch och push är bara tillgängliga via PHP API.
Börja med kom igång-guiden för att öppna ditt första arkiv från PHP och använd sedan referenserna för API och CLI för resten.