Pitmaster
Git w PHP: odczyt i zapis repozytoriów, diff, scalanie oraz obsługa inteligentnego HTTP bez uruchamiania git z powłoki.
composer require pitmaster/pitmasterNajnowsze wydanie 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/oldW praktyce
Otwórz repozytorium, a następnie odczytuj je i zapisuj za pomocą wywołań metod lub z powłoki.
Odczytaj repozytorium z PHP
Pitmaster::open() odnajduje katalog .git i zwraca uchwyt repozytorium. Każdy wpis statusu zawiera osobny stan indeksu i drzewa roboczego.
Z poziomu powłoki ./vendor/bin/pitmaster odwzorowuje podzbiór poleceń git i działa z instalacją Composer, ponieważ 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 pliku binarnego git
Podstawowe operacje działają w PHP 8.2+ bez pliku binarnego git ani FFI. Hooki i mechanizm awaryjny SSH uruchamiają procesy, chyba że przekażesz ['hooks' => false] lub processFreeOptions().
Odczyt i zapis
Luźne obiekty, pliki pack z rozwiązywaniem delt, indeks, referencje i konfiguracja. git odczytuje to, co Pitmaster zapisuje w indeksie w wersji 2 i 3 oraz w luźnych referencjach.
Diff i scalanie
Diffy metodami Myersa, patience i histogram z wykrywaniem zmian nazw. Scalanie trójstronne ze znacznikami konfliktów.
Protokół sieciowy
Klonowanie, pobieranie i wysyłanie przez inteligentne HTTP lub SSH, z awaryjną obsługą prostego HTTP przy klonowaniu i pobieraniu. Protokół v2 jest dostępny przez klienty niższego poziomu.
Operacje Git
dodawanie, zatwierdzanie, sprawdzanie statusu i różnic, scalanie, przełączanie, resetowanie, odkładanie zmian, wybieranie commitów, cofanie, zmiana bazy, wskazywanie autorów zmian, wyszukiwanie
CLI
22 polecenia w stylu git, w tym init, log, status, diff, add, commit, branch, merge, stash, blame i grep. Klonowanie, pobieranie i wysyłanie są dostępne tylko w bibliotece.
Testowane z oracle
761 scenariuszy porównuje wyniki z danymi przechwyconymi z prawdziwego git i jest uruchamianych w CI; 605 pochodzi z zestawów testowych samego git, libgit2, go-git, isomorphic-git, dulwich i JGit.
Pełne wyszukiwanie
blame, grep, bisect, notes i filtr log według ścieżki, bez uruchamiania git z powłoki.
Dlaczego Pitmaster
Działa bez instalacji git
Commity, diffy, status i historia są obliczane w PHP, więc kontenery i hosty bez pliku binarnego git nadal mogą pracować z repozytoriami.
Uchwyty bez procesów
Pitmaster::processFreeOptions() wyłącza hooki, hooki fsmonitor, klonowanie, pobieranie, wysyłanie i transport procesowy SSH. Lokalne odczyty i zapisy nadal działają.
Sprawdzone w porównaniu z git
Testy integracyjne są uruchamiane na pliku binarnym git, a macierz obsługi wykazuje, że 146 z 146 funkcji objętych zakresem zostało zweryfikowanych względem wzorca w zadeklarowanym zakresie zgodności.
SHA-1 i SHA-256
Utwórz repozytorium SHA-256 za pomocą Pitmaster::init($path, 'sha256') lub polecenia init --object-format=sha256. Pliki pack są odczytywane i zapisywane; można odczytywać pliki commit-graph, multi-pack index i reftable.
W porównaniu z
Inne sposoby pracy z repozytoriami Git w PHP oraz różnice, jakie wprowadza Pitmaster.
| Narzędzie | Dobre w | Różnica w porównaniu z Pitmaster |
|---|---|---|
| git (wiersz poleceń) | Dobre wImplementacja referencyjna z bogatym zestawem poleceń, który obejmuje zarówno operacje wysokiego poziomu, jak i pełny dostęp do wewnętrznych mechanizmów. | Różnica w porównaniu z PitmasterPitmaster działa wewnątrz procesu PHP, a podstawowe operacje nie uruchamiają git przez powłokę. Jego CLI odzwierciedla tylko część poleceń git. |
| czproject/git-php | Dobre wKompaktowy PHP API do init, clone, commit, merge, branches, tags i remotes. Działa z PHP 8.0 lub nowszym i korzysta z zainstalowanego klienta git. | Różnica w porównaniu z PitmasterPitmaster nie wymaga klienta git do podstawowych operacji, ponieważ samodzielnie odczytuje i zapisuje obiekty, pliki pack oraz indeks. Wymaga PHP 8.2 lub nowszego. |
| gitonomy/gitlib | Dobre wDostęp do repozytorium z PHP 8.4 lub nowszego bez konieczności kompilacji. Działa, wywołując git przez powłokę. | Różnica w porównaniu z PitmasterPitmaster nie wywołuje powłoki przy podstawowych operacjach, a uchwyt bez procesów wyłącza funkcje, które uruchamiałyby proces. |
| libgit2 | Dobre wPrzenośna implementacja podstawowych metod Git w języku C jako biblioteka do dołączania, z powiązaniami dla Ruby, .NET, Python, Node.js, Rust i innych. | Różnica w porównaniu z PitmasterPitmaster to zwykły PHP instalowany z Composer, bez skompilowanej biblioteki ani FFI. Importuje 63 scenariusze testowe względem wzorca z zasobów testowych libgit2. |
Źródła, zaznaczone
Pytania i odpowiedzi
Krótkie odpowiedzi z dokumentacji Pitmaster.
Nie. Podstawowe operacje na repozytorium nie korzystają z pliku binarnego git ani FFI. Obiekty, referencje, pliki pack, indeks i smart HTTP są obsługiwane w PHP.
Tak. Podczas otwierania repozytorium przekaż Pitmaster::processFreeOptions() lub ['processes' => false]. Haki, clone, fetch, push i transport procesowy SSH zostaną wtedy wyłączone, a lokalne operacje odczytu i zapisu będą nadal dostępne.
Tak, haki są domyślnie włączone i uruchamiane przez proc_open(). Przekaż ['hooks' => false] do Pitmaster::open(), Pitmaster::init() lub Pitmaster::clone(), aby pominąć skrypty w .git/hooks dla tego uchwytu.
Pitmaster::clone(), fetch() i push() używają SSH dla adresów URL SSH, a w pozostałych przypadkach smart HTTP. Jeśli wymiana smart się nie powiedzie, clone i fetch przechodzą na dumb HTTP. SSH korzysta z rozszerzenia ssh2, jeśli jest załadowane, a w przeciwnym razie z systemowego pliku binarnego ssh.
Przekaż 'sha256' jako drugi argument do Pitmaster::init() albo uruchom init z opcją --object-format=sha256. Obiekty będą wtedy używać skrótów o długości 64 znaków.
Nie. Odzwierciedla część poleceń git, takich jak log, status, diff, commit, merge, blame i grep. Clone, fetch i push są dostępne wyłącznie przez PHP API.
Zacznij od przewodnika dla początkujących, aby otworzyć pierwsze repozytorium z PHP, a następnie skorzystaj z dokumentacji API i CLI.