
# Bevezetés
Az Pitmaster egy tisztán PHP-alapú könyvtár, amely natívan olvassa és írja az Git tárolókat. Az alapvető tárolóműveletekhez nem futtatja a `git` binárist, és nem használ FFI-t. Az Git objektummodell, a pack fájlformátum, az indexformátum és az intelligens HTTP átvitel megvalósítása PHP nyelven készült.

## Miért készült az Pitmaster

Az PHP alkalmazások, amelyek Git adattárakkal dolgoznak, általában parancssori hívással indítják el a `git` bináris fájlt. Ez működik, de szigorú függőséget teremt: a `git` telepítése szükséges, biztonsági aggályokat vet fel az `exec()` és az `proc_open()` kapcsán, valamint megnehezíti az alkalmazás telepítését korlátozott környezetekben (git nélküli konténerekben, megosztott tárhelyen és szerver nélküli függvényekben).

Az Pitmaster megszünteti az `git`-függőséget az alapvető tárolóműveleteknél. Az PHP-alkalmazás commitelőzményeket olvashat be, commitokat hozhat létre, különbségeket számíthat ki, állapotot ellenőrizhet, és intelligens HTTP használatával küldhet adatokat távoli tárolókba, mindezt kizárólag az PHP beépített függvényeivel. Kivételt jelentenek a hookok és a SSH átvitel: mindkettő folyamatokat indít el, és mindkettő kikapcsolható tárolókezelőnként (lásd: [Hookok](https://pitmaster.inline0.dev/hu/docs/advanced/hooks)).

## Mit tud

- Laza objektumok (blob, tree, commit, tag) olvasása és írása
- Pack fájlok olvasása és a delta-láncok feloldása (OFS_DELTA és REF_DELTA)
- Pack fájlok írása hálózati műveletekhez
- Az index és az előkészítési terület olvasása és írása (v2, v3, v4 formátumok)
- Hivatkozások olvasása és írása (ágak, címkék, HEAD, packed-refs, reftable)
- Különbségek kiszámítása (Myers, Patience, Histogram és Minimal algoritmusokkal), git egységes formátumában
- Háromutas összevonások végrehajtása ütközésfelismeréssel
- Commitgráfok bejárása (napló, leszármazás, összevonási alap)
- Az Git intelligens HTTP protokoll használata (klónozás, lekérés, feltöltés)
- Munkafák, almodulok, stash, hookok és Git LFS támogatása

## Követelmények

- PHP 8.2 vagy újabb
- `zlib` kiterjesztés (szinte minden PHP-telepítésben beépített)
- `json` kiterjesztés
- `mbstring` kiterjesztés (az `composer.json` csomagban deklarálva, ezért az Composer telepítéskor megköveteli)
- `ctype` kiterjesztés (objektumhash-ek ellenőrzéséhez; a legtöbb PHP buildben engedélyezve, de az `composer.json` csomagban nincs deklarálva)

Az alapvető tárolóműveletekhez nincs szükség a `git` binárisra. Az opcionális funkciókhoz további futásidejű képességekre lehet szükség: a hookok végrehajtásához a `proc_open()` szükséges, a SSH átvitel pedig a `ext-ssh2`-t használja, ha be van töltve; egyébként a rendszer a `proc_open()` segítségével indítja el a rendszer `ssh` binárisát.

## Gyors példa

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

Kezdje az [Első lépések](https://pitmaster.inline0.dev/hu/docs/getting-started) résszel, majd a többi funkcióhoz használja a [API](https://pitmaster.inline0.dev/hu/docs/api), a [CLI](https://pitmaster.inline0.dev/hu/docs/cli) és a [Műveletek](https://pitmaster.inline0.dev/hu/docs/operations/read) oldalakat. A [Tesztelés](https://pitmaster.inline0.dev/hu/docs/testing) leírja, hogyan ellenőrzi a rendszer az Pitmaster működését az `git` alapján.
