Przejdź do treści

Pitmaster

Git w PHP: odczyt i zapis repozytoriów, diff, scalanie oraz obsługa inteligentnego HTTP bez uruchamiania git z powłoki.

Terminal
composer require pitmaster/pitmaster

Najnowsze wydanie v0.2.11 MIT PHP 8.2+

W 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.

PHP
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";
}

Bez 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.

Pitmaster w porównaniu z innymi narzędziami
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.

Pytania i odpowiedzi

Krótkie odpowiedzi z dokumentacji Pitmaster.

Zacznij od przewodnika dla początkujących, aby otworzyć pierwsze repozytorium z PHP, a następnie skorzystaj z dokumentacji API i CLI.