
# Вступ
Pitmaster — це чиста бібліотека PHP, яка безпосередньо читає та записує репозиторії Git. Основні операції з репозиторієм не запускають двійковий файл `git` через командну оболонку й не використовують FFI. Модель об’єктів Git, формат файлів пакетів, формат індексу та транспорт розумного HTTP реалізовані в PHP.

## Навіщо існує Pitmaster

Зазвичай програми PHP, що працюють із репозиторіями Git, запускають двійковий файл `git` через командну оболонку. Це працює, але створює жорстку залежність від установленого `git`, викликає занепокоєння щодо безпеки, пов’язані з `exec()` та `proc_open()`, і ускладнює розгортання програми в обмежених середовищах (контейнерах без git, на віртуальному хостингу та в безсерверних функціях).

Pitmaster усуває залежність від `git` для основної роботи з репозиторієм. Ваша програма PHP може читати історію комітів, створювати коміти, обчислювати різниці, перевіряти стан і надсилати зміни до віддалених репозиторіїв через розумний HTTP, використовуючи лише вбудовані функції PHP. Винятки — хуки та транспорт SSH: обидва запускають процеси, і їх можна вимкнути для кожного дескриптора репозиторію (див. [Хуки](https://pitmaster.inline0.dev/uk/docs/advanced/hooks)).

## Що він робить

- Читає та записує окремі об’єкти (blob, tree, commit, tag)
- Читає файли пакетів і розв’язує ланцюжки delta (OFS_DELTA і REF_DELTA)
- Записує файли пакетів для мережевих операцій
- Читає та записує індекс/область підготовки (формати v2, v3, v4)
- Читає та записує посилання (гілки, теги, HEAD, packed-refs, reftable)
- Обчислює різниці алгоритмами Myers, Patience, Histogram і Minimal у форматі уніфікованих різниць git
- Виконує тристоронні злиття з виявленням конфліктів
- Переглядає графи комітів (журнал, походження, спільна база злиття)
- Підтримує протокол Git smart HTTP (клонування, отримання, надсилання)
- Підтримує робочі дерева, підмодулі, stash, хуки та Git LFS

## Вимоги

- PHP версії 8.2 або новішої
- Розширення `zlib` (вбудоване майже в усі інсталяції PHP)
- Розширення `json`
- Розширення `mbstring` (указане в `composer.json`, тому Composer потребує його під час установлення)
- Розширення `ctype` (для перевірки хешів об’єктів; увімкнене в більшості збірок PHP, але не вказане в `composer.json`)

Для основних операцій із репозиторієм не потрібен двійковий файл `git`. Додаткові можливості можуть потребувати додаткових засобів під час виконання: для виконання хуків використовується `proc_open()`, а транспорт SSH використовує `ext-ssh2`, якщо він завантажений, інакше запускає системний двійковий файл `ssh` через `proc_open()`.

## Короткий приклад

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

Почніть із розділу [Початок роботи](https://pitmaster.inline0.dev/uk/docs/getting-started), а потім перегляньте [API](https://pitmaster.inline0.dev/uk/docs/api), [CLI](https://pitmaster.inline0.dev/uk/docs/cli) та [Операції](https://pitmaster.inline0.dev/uk/docs/operations/read), щоб ознайомитися з рештою можливостей. У розділі [Тестування](https://pitmaster.inline0.dev/uk/docs/testing) пояснено, як Pitmaster перевіряється на відповідність `git`.
