Ievads
Pitmaster ir tīra PHP bibliotēka, kas nolasa un raksta Git repozitorijus tieši PHP vidē. Pamatdarbībām ar repozitoriju netiek izsaukts git binārais fails vai izmantots FFI. Git objektu modelis, pakotņu failu formāts, indeksa formāts un viedais HTTP transports ir ieviesti PHP.
Kāpēc pastāv Pitmaster
Lietojumprogrammas PHP, kas darbojas ar Git repozitorijiem, parasti izsauc git bināro failu čaulas komandās. Tas darbojas, taču rada stingru atkarību no instalēta git, rada drošības riskus saistībā ar exec() un proc_open(), kā arī apgrūtina lietojumprogrammas izvietošanu ierobežotās vidēs (konteineros bez git, koplietotā mitināšanā, bezserveru funkcijās).
Pitmaster novērš atkarību no git pamatdarbībām ar repozitoriju. Jūsu PHP lietojumprogramma var lasīt commit vēsturi, veidot commit, aprēķināt atšķirības, pārbaudīt statusu un nosūtīt izmaiņas attālinātajiem repozitorijiem, izmantojot viedo HTTP tikai ar PHP iebūvētajām funkcijām. Āķi un SSH transports ir izņēmums: tie abi palaiž procesus, un tos var atspējot katram repozitorija objektam atsevišķi (skatiet Āķi).
Ko tas dara
- Nolasa un raksta atsevišķus objektus (blob, tree, commit, tag)
- Nolasa pakotņu failus un atrisina delta ķēdes (OFS_DELTA un REF_DELTA)
- Raksta pakotņu failus tīkla darbībām
- Nolasa un raksta indeksu/sagatavošanas apgabalu (formāti v2, v3, v4)
- Nolasa un raksta atsauces (atzarus, tagus, HEAD, packed-refs, reftable)
- Aprēķina atšķirības git vienotajā formātā, izmantojot Myers, Patience, Histogram un Minimal algoritmus
- Veic trīsvirzienu sapludināšanu ar konfliktu noteikšanu
- Pārlūko commit grafus (žurnālu, priekštečus, sapludināšanas bāzi)
- Atbalsta viedo Git HTTP protokolu (clone, fetch, push)
- Atbalsta darba kokus, apakšmoduļus, stash, āķus un Git LFS
Kas tam nepieciešams
- PHP 8.2 vai jaunāka versija
- Paplašinājums
zlib(iebūvēts gandrīz visās PHP instalācijās) - Paplašinājums
json - Paplašinājums
mbstring(deklarētscomposer.json, tāpēc Composer tas ir nepieciešams instalēšanas laikā) - Paplašinājums
ctype(izmanto objektu jaucējvērtību validēšanai; iespējots lielākajā daļā PHP būvējumu, bet nav deklarētscomposer.json)
Repozitorija pamatdarbībām nav nepieciešams git binārais fails. Izvēles funkcijām var būt vajadzīgas papildu izpildlaika iespējas: āķu izpilde izmanto proc_open(), un SSH transports izmanto ext-ssh2, ja tas ir ielādēts, bet citādi palaiž sistēmas ssh bināro failu ar proc_open() palīdzību.
Īss piemērs
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";
}
// Create a commit
$repo->add('src/Feature.php');
$commitId = $repo->commit('Add new feature');
Sāciet ar sadaļu Darba sākšana, pēc tam izmantojiet API, CLI un Darbības, lai iepazītos ar pārējo funkcionalitāti. Testēšana skaidro, kā Pitmaster tiek salīdzināts ar git.