
# Įvadas
Pitmaster yra gryna PHP biblioteka, kuri savaime skaito ir rašo Git saugyklas. Pagrindinės saugyklos operacijos nevykdo išorinių komandų per `git` dvejetainį failą ir nenaudoja FFI. Git objektų modelis, paketų failų formatas, indekso formatas ir išmanusis HTTP transportas įgyvendinti PHP.

## Kodėl sukurta Pitmaster

PHP programos, sąveikaujančios su Git saugyklomis, paprastai vykdo išorinį `git` dvejetainį failą. Tai veikia, tačiau reikalauja, kad būtų įdiegta `git`, kelia saugumo problemų, susijusių su `exec()` ir `proc_open()`, ir apsunkina programos diegimą apribotose aplinkose (konteineriuose be git, bendrojo naudojimo priegloboje, serverless funkcijose).

Pitmaster panaikina `git` priklausomybę atliekant pagrindines saugyklos operacijas. Jūsų PHP programa gali skaityti įrašų istoriją, kurti įrašus, apskaičiuoti skirtumus, tikrinti būseną ir siųsti pakeitimus į nuotolines saugyklas per išmanųjį HTTP, naudodama tik įtaisytąsias PHP funkcijas. Išimtys yra hook ir SSH transportas: abu paleidžia procesus, o abu galima išjungti kiekvienai saugyklos nuorodai atskirai (žr. [Hook](https://pitmaster.inline0.dev/lt/docs/advanced/hooks)).

## Ką jis daro

- Skaito ir rašo palaidus objektus (blob, tree, commit, tag)
- Skaito paketų failus ir išsprendžia deltų grandines (OFS_DELTA ir REF_DELTA)
- Rašo paketų failus tinklo operacijoms
- Skaito ir rašo indeksą / paruošimo sritį (v2, v3, v4 formatus)
- Skaito ir rašo nuorodas (šakas, žymas, HEAD, packed-refs, reftable)
- Apskaičiuoja skirtumus git unifikuotu formatu naudodamas Myers, Patience, Histogram ir Minimal algoritmus
- Atlieka trijų krypčių suliejimus ir aptinka konfliktus
- Pereina įrašų grafus (žurnalą, kilmę, bendrą suliejimo pagrindą)
- Palaiko išmanųjį Git HTTP protokolą (klonavimą, gavimą, siuntimą)
- Palaiko darbinius medžius, submodulius, atidėjimą, hook ir Git LFS

## Ko reikia

- PHP 8.2 arba naujesnė versija
- `zlib` plėtinys (įtaisytas beveik visose PHP instaliacijose)
- `json` plėtinys
- `mbstring` plėtinys (deklaruotas faile `composer.json`, todėl Composer jo reikalauja diegimo metu)
- `ctype` plėtinys (naudojamas objektų maišoms tikrinti; įjungtas daugumoje PHP versijų, bet nedeklaruotas faile `composer.json`)

Pagrindinėms saugyklos operacijoms nereikia `git` dvejetainio failo. Pasirinktinėms funkcijoms gali prireikti papildomų vykdymo aplinkos galimybių: hook vykdymui naudojamas `proc_open()`, o SSH transportas naudoja `ext-ssh2`, jei jis įkeltas, o kitu atveju per `proc_open()` paleidžiamas sistemos `ssh` dvejetainis failas.

## Trumpas pavyzdys

```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');
```

Pradėkite nuo [Darbo pradžia](https://pitmaster.inline0.dev/lt/docs/getting-started), o likusias galimybes rasite skiltyse [API](https://pitmaster.inline0.dev/lt/docs/api), [CLI](https://pitmaster.inline0.dev/lt/docs/cli) ir [Operacijos](https://pitmaster.inline0.dev/lt/docs/operations/read). Skiltyje [Testavimas](https://pitmaster.inline0.dev/lt/docs/testing) paaiškinta, kaip Pitmaster tikrinama pagal `git`.
