
# Úvod
Pitmaster je čistá knihovna PHP, která nativně čte a zapisuje úložiště Git. Základní operace s úložištěm nespouštějí binární soubor `git` v shellu ani nepoužívají FFI. Objektový model Git, formát souboru pack, formát indexu a chytrý přenos HTTP jsou implementovány v PHP.

## Proč existuje Pitmaster

Aplikace PHP, které pracují s úložišti Git, obvykle spouštějí binární soubor `git` v shellu. Funguje to, ale vytváří to pevnou závislost na nainstalovaném `git`, přináší bezpečnostní rizika spojená s `exec()` a `proc_open()` a ztěžuje nasazení aplikace v omezených prostředích (kontejnery bez gitu, sdílený hosting, serverless funkce).

Pitmaster odstraňuje závislost na `git` při základní práci s úložištěm. Vaše aplikace PHP může číst historii commitů, vytvářet commity, počítat rozdíly, kontrolovat stav a odesílat změny do vzdálených úložišť pomocí chytrého přenosu HTTP, pouze s využitím vestavěných funkcí PHP. Výjimkou jsou hooky a přenos SSH: oba spouštějí procesy a lze je vypnout pro jednotlivý objekt úložiště (viz [Hooky](https://pitmaster.inline0.dev/cs/docs/advanced/hooks)).

## Co umí

- Čte a zapisuje volné objekty (blob, strom, commit, štítek)
- Čte soubory pack a řeší řetězce rozdílů (OFS_DELTA a REF_DELTA)
- Zapisuje soubory pack pro síťové operace
- Čte a zapisuje index/připravenou oblast (formáty v2, v3, v4)
- Čte a zapisuje odkazy (větve, štítky, HEAD, packed-refs, reftable)
- Počítá rozdíly ve sjednoceném formátu gitu (algoritmy Myers, Patience, Histogram a Minimal)
- Provádí trojcestná sloučení s detekcí konfliktů
- Prochází grafy commitů (log, předci, základní sloučení)
- Komunikuje protokolem Git chytrého HTTP (clone, fetch, push)
- Podporuje pracovní stromy, submoduly, stash, hooky a Git LFS

## Co vyžaduje

- PHP 8.2 nebo novější
- Rozšíření `zlib` (vestavěné prakticky ve všech instalacích PHP)
- Rozšíření `json`
- Rozšíření `mbstring` (deklarované v `composer.json`, takže je Composer vyžaduje při instalaci)
- Rozšíření `ctype` (slouží k ověřování hashů objektů; povoleno ve většině sestavení PHP, ale není deklarováno v `composer.json`)

Základní operace s úložištěm nevyžadují binární soubor `git`. Volitelné funkce mohou potřebovat další možnosti běhového prostředí: spouštění hooků používá `proc_open()` a přenos SSH používá `ext-ssh2`, pokud je načteno, jinak spouští systémový binární soubor `ssh` přes `proc_open()`.

## Rychlý příklad

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

Začněte průvodcem [Začínáme](https://pitmaster.inline0.dev/cs/docs/getting-started) a poté pro zbývající části použijte [API](https://pitmaster.inline0.dev/cs/docs/api), [CLI](https://pitmaster.inline0.dev/cs/docs/cli) a [Operace](https://pitmaster.inline0.dev/cs/docs/operations/read). V části [Testování](https://pitmaster.inline0.dev/cs/docs/testing) se dozvíte, jak se Pitmaster ověřuje vůči `git`.
