Вступ
Pitmaster — це чиста бібліотека PHP, яка безпосередньо читає та записує репозиторії Git. Основні операції з репозиторієм не запускають двійковий файл git через командну оболонку й не використовують FFI. Модель об’єктів Git, формат файлів пакетів, формат індексу та транспорт розумного HTTP реалізовані в PHP.
Навіщо існує Pitmaster
Зазвичай програми PHP, що працюють із репозиторіями Git, запускають двійковий файл git через командну оболонку. Це працює, але створює жорстку залежність від установленого git, викликає занепокоєння щодо безпеки, пов’язані з exec() та proc_open(), і ускладнює розгортання програми в обмежених середовищах (контейнерах без git, на віртуальному хостингу та в безсерверних функціях).
Pitmaster усуває залежність від git для основної роботи з репозиторієм. Ваша програма PHP може читати історію комітів, створювати коміти, обчислювати різниці, перевіряти стан і надсилати зміни до віддалених репозиторіїв через розумний HTTP, використовуючи лише вбудовані функції PHP. Винятки — хуки та транспорт SSH: обидва запускають процеси, і їх можна вимкнути для кожного дескриптора репозиторію (див. Хуки).
Що він робить
- Читає та записує окремі об’єкти (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().
Короткий приклад
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');
Почніть із розділу Початок роботи, а потім перегляньте API, CLI та Операції, щоб ознайомитися з рештою можливостей. У розділі Тестування пояснено, як Pitmaster перевіряється на відповідність git.