Vai al contenuto

Pitmaster

Git in PHP: legge e scrive repository, calcola diff e merge e comunica tramite smart HTTP senza avviare processi git dalla shell.

Terminale
composer require pitmaster/pitmaster

Ultima versione v0.2.11 MIT PHP 8.2+

Nella pratica

Apri un repository, poi leggilo e scrivici tramite chiamate ai metodi o dalla shell.

Leggere un repository da PHP

Pitmaster::open() individua la directory .git e restituisce un riferimento al repository. Ogni voce di stato riporta uno stato distinto per l'indice e l'albero di lavoro.

Dalla shell, ./vendor/bin/pitmaster replica un sottoinsieme dei comandi git e funziona con un'installazione Composer, poiché 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";
}

Nessun binario git

Le operazioni principali vengono eseguite in PHP 8.2+ senza binario git né FFI. Gli hook e il ripiego SSH avviano processi, a meno che non venga passato ['hooks' => false] o processFreeOptions().

Lettura e scrittura

Oggetti loose, file pack con risoluzione dei delta, indice, riferimenti e configurazione. git legge ciò che Pitmaster scrive per le versioni 2 e 3 dell'indice e per i riferimenti loose.

Diff e merge

Diff Myers, patience e histogram con rilevamento delle rinomine. Merge a tre vie con marcatori di conflitto.

Protocollo di rete

Clona, recupera e invia tramite smart HTTP o SSH, con ripiego su HTTP dumb per clone e fetch. Il protocollo v2 è disponibile tramite i client di livello inferiore.

Operazioni Git

aggiungere, eseguire commit, controllare lo stato, confrontare le modifiche, unire, cambiare ramo, ripristinare, mettere da parte, applicare selettivamente, annullare, riapplicare, attribuire, cercare.

CLI

22 comandi in stile git, tra cui init, log, status, diff, add, commit, branch, merge, stash, blame e grep. Clone, fetch e push sono disponibili solo tramite la libreria.

Verificato con oracle

761 scenari confrontano i risultati con l'output acquisito da git reale e vengono eseguiti in CI; 605 provengono dalle suite di test di git stesso, libgit2, go-git, isomorphic-git, dulwich e JGit.

Ricerca completa

Blame, grep, bisect, note e filtro dei percorsi nel log, senza avviare processi git dalla shell.

Perché Pitmaster

Funziona senza installare git

Commit, diff, stato e cronologia vengono calcolati in PHP, così anche i container e gli host senza binario git possono lavorare con i repository.

Riferimenti senza processi

Pitmaster::processFreeOptions() disattiva hook, hook fsmonitor, clone, fetch, push e trasporto di processi SSH. Le letture e scritture locali continuano a funzionare.

Verificato rispetto a git

I test di integrazione vengono eseguiti rispetto al binario git e la matrice di supporto conta 146 funzionalità su 146 incluse nell'ambito come verificate con oracle entro l'ambito di parità dichiarato.

SHA-1 e SHA-256

Crea un repository SHA-256 con Pitmaster::init($path, 'sha256') oppure esegui init --object-format=sha256. I file pack vengono letti e scritti; i file commit-graph, multi-pack index e reftable possono essere letti.

A confronto con

Altri modi per lavorare con repository Git da PHP e differenze rispetto a Pitmaster.

Pitmaster a confronto con altri strumenti
git (riga di comando) Ideale perL'implementazione di riferimento, con un ricco set di comandi che copre sia le operazioni di alto livello sia l'accesso completo ai componenti interni. Differenze rispetto a PitmasterPitmaster viene eseguito all'interno del processo PHP e le operazioni principali non avviano processi git dalla shell. Il suo CLI replica solo un sottoinsieme dei comandi git.
czproject/git-php Ideale perUn PHP API compatto per init, clone, commit, merge, branch, tag e remote. Funziona con PHP 8.0 o versioni successive e si appoggia al client git installato. Differenze rispetto a PitmasterPitmaster non richiede un client git per le operazioni principali, perché legge e scrive direttamente oggetti, file pack e indice. Richiede PHP 8.2 o versioni successive.
gitonomy/gitlib Ideale perAccesso ai repository da PHP 8.4 o versioni successive, senza nulla da compilare. Funziona eseguendo chiamate alla shell per git. Differenze rispetto a PitmasterPitmaster non esegue chiamate alla shell per le operazioni principali; un riferimento senza processi disattiva le parti che ne avvierebbero uno.
libgit2 Ideale perImplementazione portabile in C dei metodi principali di Git come libreria collegabile, con binding per Ruby, .NET, Python, Node.js, Rust e altri linguaggi. Differenze rispetto a PitmasterPitmaster è PHP puro, installato con Composer, senza libreria compilata né FFI. Importa 63 scenari oracle dalle risorse di test di libgit2.

Domande e risposte

Risposte brevi dalla documentazione di Pitmaster.

Inizia con la guida introduttiva per aprire il tuo primo repository da PHP, poi consulta i riferimenti API e CLI per il resto.