Pitmaster
Git aplinkoje PHP: skaitykite ir įrašykite saugyklas, atlikite diff ir merge, naudokite išmanų HTTP, nekviesdami git per shell.
composer require pitmaster/pitmasterNaujausia versija 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/oldPraktinis pritaikymas
Atidarykite saugyklą, tada skaitykite ir keiskite ją iškviesdami metodus arba naudodami shell.
Skaitykite saugyklą iš PHP
Pitmaster::open() suranda .git katalogą ir grąžina saugyklos nuorodą. Kiekvienas būsenos įrašas atskirai nurodo indeksavimo srities ir darbinio medžio būseną.
Iš shell ./vendor/bin/pitmaster imituoja dalį git komandų ir veikia su Composer dieginiu, nes 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 featureNereikia git dvejetainio failo
Pagrindinės operacijos vykdomos naudojant PHP 8.2+ be git dvejetainio failo ar FFI. Kabliukai ir atsarginis SSH paleidžia procesus, nebent perduodate ['hooks' => false] arba processFreeOptions().
Skaitymas ir rašymas
Atskiri objektai, paketo failai su deltos išsprendimu, indeksas, nuorodos ir konfigūracija. git perskaito tai, ką Pitmaster įrašo, kai naudojamos 2 ir 3 versijų indeksai bei atskiros nuorodos.
Diff ir merge
Myers, patience ir histogram diff algoritmai su pervadinimų aptikimu. Trijų krypčių sujungimas su konfliktų žymomis.
Tinklo protokolas
Klonuokite, gaukite ir siųskite naudodami išmanųjį HTTP arba SSH, o klonavimui ir gavimui prireikus naudokite paprastąjį HTTP. v2 protokolas prieinamas per žemesnio lygio klientus.
Git operacijos
pridėti, patvirtinti, peržiūrėti būseną, palyginti pakeitimus, sujungti, perjungti šaką, atkurti, atidėti, perkelti pasirinktą pakeitimą, atšaukti, perkelti pakeitimus į kitą šaką, peržiūrėti pakeitimų autorių, ieškoti.
CLI
22 į git panašios komandos, įskaitant init, log, status, diff, add, commit, branch, merge, stash, blame ir grep. Klonavimas, gavimas ir siuntimas prieinami tik bibliotekoje.
Patikrinta su Oracle
761 scenarijų lygina rezultatus su tikro git išvestimi ir vykdomi CI aplinkoje; 605 paimti iš pačios git, libgit2, go-git, isomorphic-git, dulwich ir JGit testų rinkinių.
Išsami paieška
Blame, grep, bisect, notes ir žurnalo kelio filtras – be git paleidimo per shell.
Kodėl Pitmaster
Veikia be įdiegto git
Pateiktys, skirtumai, būsena ir istorija apskaičiuojami PHP, todėl su saugyklomis galima dirbti ir konteineriuose bei prieglobos aplinkose, kuriose nėra git programos.
Procesų nepaleidžiančios nuorodos
Pitmaster::processFreeOptions() išjungia kabliukus, fsmonitor kabliukus, klonavimą, gavimą, siuntimą ir SSH procesų transportą. Vietinis skaitymas ir rašymas toliau veikia.
Patikrinta su git
Integravimo testai vykdomi su git programa, o palaikymo matrica nurodo, kad oracle testais patvirtinta 146 iš 146 į aprėptį patenkančių funkcijų, laikantis joje apibrėžtos suderinamumo aprėpties.
SHA-1 ir SHA-256
Sukurkite SHA-256 saugyklą naudodami Pitmaster::init($path, 'sha256') arba init --object-format=sha256. Pakuočių failai skaitomi ir įrašomi; commit-graph, multi-pack index ir reftable failus galima skaityti.
Palyginimas su
Kiti būdai dirbti su Git saugyklomis iš PHP ir kuo skiriasi Pitmaster.
| Įrankis | Stipriosios pusės | Skirtumas nuo Pitmaster |
|---|---|---|
| git (komandinė eilutė) | Stipriosios pusėsEtaloninė realizacija su gausiu komandų rinkiniu, apimančiu tiek aukšto lygio operacijas, tiek visapusišką prieigą prie vidinių komponentų. | Skirtumas nuo PitmasterPitmaster veikia PHP procese, o pagrindinės operacijos nepaleidžia git per shell. Jos CLI imituoja tik dalį git komandų. |
| czproject/git-php | Stipriosios pusėsKompaktiškas PHP API, skirtas init, clone, commit, merge, šakoms, žymoms ir nuotolinėms saugykloms. Veikia su PHP 8.0 arba naujesne versija ir naudoja įdiegtą git klientą. | Skirtumas nuo PitmasterPagrindinėms operacijoms Pitmaster nereikia git kliento, nes pati skaito ir įrašo objektus, pakuočių failus bei indeksą. Reikalinga PHP 8.2 arba naujesnė versija. |
| gitonomy/gitlib | Stipriosios pusėsPrieiga prie saugyklų naudojant PHP 8.4 arba naujesnę versiją; nieko nereikia kompiliuoti. Veikia vykdydama git komandas per shell. | Skirtumas nuo PitmasterPitmaster pagrindinėms operacijoms nevykdo shell komandų, o procesų nepaleidžianti nuoroda išjungia funkcijas, kurios paleistų procesą. |
| libgit2 | Stipriosios pusėsPernešama C realizacija, įgyvendinanti pagrindinius Git metodus kaip susiejama biblioteka su sąsajomis, skirtomis Ruby, .NET, Python, Node.js, Rust ir kitoms kalboms. | Skirtumas nuo PitmasterPitmaster yra paprastas PHP, įdiegiamas su Composer; nereikia kompiliuotos bibliotekos ar FFI. Ji importuoja 63 oracle scenarijus iš libgit2 testų išteklių. |
Šaltiniai, pažymėta
Klausimai ir atsakymai
Trumpi atsakymai iš Pitmaster dokumentacijos.
Ne. Pagrindinėms saugyklos operacijoms nenaudojama git programa ar FFI. Objektai, nuorodos, pakuočių failai, indeksas ir išmanusis HTTP apdorojami naudojant PHP.
Taip. Atidarydami saugyklą perduokite Pitmaster::processFreeOptions() arba ['processes' => false]. Tada išjungiami kabliukai, klonavimas, gavimas, siuntimas ir SSH procesų transportas, o vietinis skaitymas ir rašymas lieka prieinami.
Taip, kabliukai pagal numatytuosius nustatymus įjungti ir vykdomi per proc_open(). Perduokite ['hooks' => false] į Pitmaster::open(), Pitmaster::init() arba Pitmaster::clone(), kad šiai nuorodai nebūtų vykdomi .git/hooks esantys scenarijai.
Pitmaster::clone(), fetch() ir push() naudoja SSH su SSH URL ir kitu atveju – išmanųjį HTTP; jei išmanusis apsikeitimas nepavyksta, klonavimas ir gavimas naudoja paprastąjį HTTP. SSH naudoja ssh2 plėtinį, jei jis įkeltas, o kitu atveju – sistemos ssh programą.
Taip. Perduokite 'sha256' kaip antrąjį argumentą funkcijai Pitmaster::init() arba vykdykite init su --object-format=sha256. Tada objektuose naudojamos 64 simbolių maišos reikšmės.
Ne. Ji imituoja dalį git komandų, pavyzdžiui, log, status, diff, commit, merge, blame ir grep. Klonuoti, gauti ir siųsti galima tik per PHP API.
Pradėkite nuo darbo pradžios vadovo: jame sužinosite, kaip atidaryti pirmąją saugyklą iš PHP, o vėliau naudokitės likusia informacija, pateikta API ir CLI nuorodose.