
# Sissejuhatus
Pitmaster on puhas PHP teek, mis loeb ja kirjutab Git hoidlaid otse. Hoidla põhitoimingud ei käivita käsurealt `git` binaari ega kasuta FFI-d. Git objektimudel, pakifailivorming, registrivorming ja nutikas HTTP-transport on teostatud PHP-is.

## Miks Pitmaster olemas on

PHP rakendused, mis kasutavad Git hoidlaid, käivitavad tavaliselt käsurealt `git` binaari. See toimib, kuid tekitab tugeva sõltuvuse sellest, et `git` oleks installitud, toob kaasa turvariske seoses `exec()` ja `proc_open()`-iga ning raskendab rakenduse juurutamist piiratud keskkondades (konteinerid, kus git puudub, jagatud majutus, serverita funktsioonid).

Pitmaster kõrvaldab hoidla põhitoimingute jaoks sõltuvuse paketist `git`. Teie PHP-rakendus saab lugeda sissekannete ajalugu, luua sissekandeid, arvutada erinevusi, kontrollida olekut ja saata muudatusi kaughoidlatesse nutika HTTP kaudu, kasutades ainult PHP sisseehitatud funktsioone. Erandiks on hookid ja SSH-transport: mõlemad käivitavad protsesse ning mõlemad saab hoidlakäepideme kaupa välja lülitada (vt [Hookid](https://pitmaster.inline0.dev/et/docs/advanced/hooks)).

## Mida see teeb

- Loeb ja kirjutab lahtisi objekte (blob, puu, sissekanne, silt)
- Loeb pakifaile ja lahendab delta-ahelaid (OFS_DELTA ja REF_DELTA)
- Kirjutab võrgutoimingute jaoks pakifaile
- Loeb ja kirjutab registrit/lavastusala (vormingud v2, v3, v4)
- Loeb ja kirjutab viiteid (harud, sildid, HEAD, packed-refs, reftable)
- Arvutab erinevusi (Myersi, Patience'i, Histogrammi ja Minimal algoritmidega) giti ühtses vormingus
- Teeb kolmesuunalisi liitmisi ja tuvastab konfliktid
- Läbib sissekannete graafe (logi, eellasus, liitmise alus)
- Kasutab Git nutikat HTTP-protokolli (klooni, too, saada)
- Toetab tööpuid, alamooduleid, riiuldamist, hooke ja Git LFS-i

## Nõuded

- PHP 8.2 või uuem
- Laiendus `zlib` (sisseehitatud peaaegu kõigis PHP paigaldustes)
- Laiendus `json`
- Laiendus `mbstring` (deklareeritud failis `composer.json`, seega nõuab Composer seda installimise ajal)
- Laiendus `ctype` (kasutatakse objektiräside valideerimiseks; enamikus PHP järgudes lubatud, kuid failis `composer.json` deklareerimata)

Hoidla põhitoimingud ei vaja binaari `git`. Valikulised funktsioonid võivad vajada täiendavaid käituskeskkonna võimalusi: hookide käivitamiseks kasutatakse `proc_open()`-i ning transport SSH kasutab laadimise korral `ext-ssh2`-i, muul juhul käivitab see süsteemi binaari `ssh` programmi `proc_open()` kaudu.

## Kiire näide

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

Alustage jaotisest [Alustamine](https://pitmaster.inline0.dev/et/docs/getting-started), seejärel tutvuge ülejäänud võimalustega jaotistes [API](https://pitmaster.inline0.dev/et/docs/api), [CLI](https://pitmaster.inline0.dev/et/docs/cli) ja [Toimingud](https://pitmaster.inline0.dev/et/docs/operations/read). Jaotis [Testimine](https://pitmaster.inline0.dev/et/docs/testing) selgitab, kuidas kontrollitakse, et Pitmaster vastab `git`-ile.
