
# Introduktion
Pitmaster är ett rent PHP-bibliotek som läser och skriver Git-repon direkt. Centrala repooperationer anropar inte binärfilen `git` via skalet och använder inte FFI. Objektmodellen Git, pack-filformatet, indexformatet och smart HTTP-transporten är implementerade i PHP.

## Varför Pitmaster finns

PHP-applikationer som arbetar med Git-repon anropar vanligtvis binärfilen `git` via skalet. Det fungerar, men skapar ett hårt beroende av att `git` är installerat, medför säkerhetsproblem kring `exec()` och `proc_open()` och gör applikationen svårare att driftsätta i begränsade miljöer (containrar utan git, delad hosting, serverlösa funktioner).

Pitmaster tar bort beroendet av `git` för centralt repoarbete. Din PHP-applikation kan läsa commit-historik, skapa commits, beräkna diffar, kontrollera status och skicka ändringar till fjärrservrar via smart HTTP med enbart de inbyggda funktionerna i PHP. Hooks och transporten SSH är undantagen: båda startar processer och kan stängas av per repo-handtag (se [Hooks](https://pitmaster.inline0.dev/sv/docs/advanced/hooks)).

## Vad det gör

- Läser och skriver lösa objekt (blob, tree, commit, tag)
- Läser pack-filer och löser deltakedjor (OFS_DELTA och REF_DELTA)
- Skriver pack-filer för nätverksåtgärder
- Läser och skriver indexet och stagingområdet (formaten v2, v3, v4)
- Läser och skriver referenser (grenar, taggar, HEAD, packed-refs, reftable)
- Beräknar diffar (algoritmerna Myers, Patience, Histogram och Minimal) i det enhetliga formatet för git
- Utför trevägssammanslagningar med konfliktdetektering
- Går igenom commit-grafer (logg, härkomst, merge-bas)
- Använder smart Git-HTTP-protokoll (kloning, hämtning, push)
- Har stöd för arbetsträd, undermoduler, stash, hooks och Git LFS

## Vad det kräver

- PHP 8.2 eller senare
- Tillägget `zlib` (inbyggt i praktiskt taget alla PHP-installationer)
- Tillägget `json`
- Tillägget `mbstring` (deklarerat i `composer.json`, så Composer kräver det vid installationen)
- Tillägget `ctype` (används för att validera objekthashar; aktiverat i de flesta PHP-byggen, men inte deklarerat i `composer.json`)

Centrala repooperationer kräver inte binärfilen `git`. Valfria funktioner kan behöva ytterligare körningsfunktioner: hook-körning använder `proc_open()`, och transporten SSH använder `ext-ssh2` när det är laddat och startar annars systemets binärfil `ssh` via `proc_open()`.

## Snabbexempel

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

Börja med [Kom igång](https://pitmaster.inline0.dev/sv/docs/getting-started) och använd sedan [API](https://pitmaster.inline0.dev/sv/docs/api), [CLI](https://pitmaster.inline0.dev/sv/docs/cli) och [Åtgärder](https://pitmaster.inline0.dev/sv/docs/operations/read) för resten av funktionerna. [Testning](https://pitmaster.inline0.dev/sv/docs/testing) beskriver hur Pitmaster testas mot `git`.
