Pitmaster
Git in PHP: legge e scrive repository, calcola diff e merge e comunica tramite smart HTTP senza avviare processi git dalla shell.
composer require pitmaster/pitmasterUltima versione 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/oldNella 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.
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 featureNessun 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.
| Strumento | Ideale per | Differenze rispetto a Pitmaster |
|---|---|---|
| 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. |
Fonti, selezionato
Domande e risposte
Risposte brevi dalla documentazione di Pitmaster.
No. Le operazioni principali sui repository non usano il binario git né FFI. Oggetti, riferimenti, file pack, indice e smart HTTP sono gestiti in PHP.
Sì. Passa Pitmaster::processFreeOptions() o ['processes' => false] quando apri il repository. Hook, clone, fetch, push e trasporto di processi SSH vengono disattivati, mentre le letture e scritture locali restano disponibili.
Sì, gli hook sono attivi per impostazione predefinita e vengono eseguiti tramite proc_open(). Passa ['hooks' => false] a Pitmaster::open(), Pitmaster::init() o Pitmaster::clone() per saltare gli script in .git/hooks per quel riferimento.
Pitmaster::clone(), fetch() e push() usano SSH per gli URL SSH e smart HTTP negli altri casi; clone e fetch ripiegano su HTTP dumb se lo scambio smart non riesce. SSH usa l'estensione ssh2 se è caricata, altrimenti il binario ssh di sistema.
Sì. Passa 'sha256' come secondo argomento a Pitmaster::init() oppure esegui init con --object-format=sha256. Gli oggetti useranno hash di 64 caratteri.
No. Replica un sottoinsieme dei comandi git, come log, status, diff, commit, merge, blame e grep. Clone, fetch e push sono disponibili solo tramite il PHP API.
Inizia con la guida introduttiva per aprire il tuo primo repository da PHP, poi consulta i riferimenti API e CLI per il resto.