
# Pendahuluan
Pitmaster adalah pustaka PHP murni yang membaca dan menulis repositori Git secara native. Operasi inti repositori tidak menjalankan biner `git` melalui shell atau menggunakan FFI. Model objek Git, format file pack, format indeks, dan transport HTTP pintar diimplementasikan dalam PHP.

## Alasan keberadaan Pitmaster

Aplikasi PHP yang berinteraksi dengan repositori Git biasanya menjalankan biner `git` melalui shell. Cara ini berfungsi, tetapi membuat `git` harus terpasang, menimbulkan masalah keamanan terkait `exec()` dan `proc_open()`, serta mempersulit penerapan aplikasi di lingkungan terbatas (container tanpa git, shared hosting, fungsi serverless).

Pitmaster menghilangkan ketergantungan pada `git` untuk pekerjaan inti repositori. Aplikasi PHP Anda dapat membaca riwayat commit, membuat commit, menghitung diff, memeriksa status, dan melakukan push ke remote melalui HTTP pintar hanya dengan fungsi bawaan PHP. Hook dan transport SSH adalah pengecualian: keduanya memulai proses dan dapat dinonaktifkan per handle repositori (lihat [Hook](https://pitmaster.inline0.dev/id/docs/advanced/hooks)).

## Fungsinya

- Membaca dan menulis objek lepas (blob, tree, commit, tag)
- Membaca file pack dan me-resolve rantai delta (OFS_DELTA dan REF_DELTA)
- Menulis file pack untuk operasi jaringan
- Membaca dan menulis area indeks/staging (format v2, v3, v4)
- Membaca dan menulis refs (branch, tag, HEAD, packed-refs, Reftable)
- Menghitung diff (algoritma Myers, Patience, Histogram, dan Minimal) dalam format terpadu git
- Melakukan merge tiga arah dengan deteksi konflik
- Menelusuri graf commit (log, ancestry, merge base)
- Menggunakan protokol Git HTTP pintar (clone, fetch, push)
- Mendukung worktree, submodule, stash, hook, dan Git LFS

## Persyaratan

- PHP 8.2 atau lebih baru
- Ekstensi `zlib` (bawaan di hampir semua instalasi PHP)
- Ekstensi `json`
- Ekstensi `mbstring` (dideklarasikan di `composer.json`, sehingga Composer memerlukannya saat instalasi)
- Ekstensi `ctype` (digunakan untuk memvalidasi hash objek; diaktifkan di sebagian besar build PHP, tetapi tidak dideklarasikan di `composer.json`)

Operasi inti repositori tidak memerlukan biner `git`. Fitur opsional mungkin memerlukan kemampuan runtime tambahan: eksekusi hook menggunakan `proc_open()`, dan transport SSH menggunakan `ext-ssh2` saat dimuat, atau menjalankan biner sistem `ssh` melalui `proc_open()` jika tidak.

## Contoh singkat

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

Mulai dengan [Memulai](https://pitmaster.inline0.dev/id/docs/getting-started), lalu gunakan [API](https://pitmaster.inline0.dev/id/docs/api), [CLI](https://pitmaster.inline0.dev/id/docs/cli), dan [Operasi](https://pitmaster.inline0.dev/id/docs/operations/read) untuk bagian lainnya. [Pengujian](https://pitmaster.inline0.dev/id/docs/testing) menjelaskan cara Pitmaster diperiksa terhadap `git`.
