
# 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](https://pitmaster.inline0.dev/lv/docs/advanced/hooks)).

## 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ēts `composer.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ēts `composer.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

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

// Create a commit
$repo->add('src/Feature.php');
$commitId = $repo->commit('Add new feature');
```

Sāciet ar sadaļu [Darba sākšana](https://pitmaster.inline0.dev/lv/docs/getting-started), pēc tam izmantojiet [API](https://pitmaster.inline0.dev/lv/docs/api), [CLI](https://pitmaster.inline0.dev/lv/docs/cli) un [Darbības](https://pitmaster.inline0.dev/lv/docs/operations/read), lai iepazītos ar pārējo funkcionalitāti. [Testēšana](https://pitmaster.inline0.dev/lv/docs/testing) skaidro, kā Pitmaster tiek salīdzināts ar `git`.
