Перейти к содержимому

Pitmaster

Git для работы с PHP: чтение и запись репозиториев, сравнение изменений, слияние и работа со смарт-протоколом HTTP без вызова git из командной оболочки.

Терминал
composer require pitmaster/pitmaster

Последний выпуск v0.2.11 MIT PHP 8.2+

На практике

Откройте репозиторий, затем читайте и записывайте данные вызовами методов или из командной оболочки.

Чтение репозитория из PHP

Pitmaster::open() находит каталог .git и возвращает дескриптор репозитория. Для каждой записи о состоянии отдельно указывается состояние индекса и рабочего дерева.

Из командной оболочки ./vendor/bin/pitmaster поддерживает подмножество команд git и работает при установке Composer, поскольку 0.2.11.

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";
}

Без бинарного файла git

Основные операции выполняются в PHP 8.2+ без бинарного файла git и FFI. Хуки и резервный вариант SSH запускают процессы, если не передать ['hooks' => false] или processFreeOptions().

Чтение и запись

Свободные объекты, pack-файлы с разрешением дельт, индекс, ссылки и конфигурация. git читает то, что записывает Pitmaster, для версий индекса 2 и 3, а также свободных ссылок.

Сравнение и слияние

Алгоритмы сравнения Myers, patience и histogram с обнаружением переименований. Трёхстороннее слияние с маркерами конфликтов.

Сетевой протокол

Клонирование, получение и отправка данных по смарт-протоколу HTTP или SSH; для клонирования и получения данных предусмотрен резервный вариант с простым протоколом HTTP. Протокол v2 доступен через низкоуровневые клиенты.

Операции Git

добавление, фиксация, проверка статуса, просмотр различий, слияние, переключение, сброс, временное сохранение, выборочное применение коммита, отмена, перебазирование, просмотр авторства, поиск.

CLI

22 команды в стиле git, в том числе init, log, status, diff, add, commit, branch, merge, stash, blame и grep. Клонирование, получение и отправка данных доступны только через библиотеку.

Проверено оракулом

761 сценариев сравнивают результаты с данными, полученными от настоящего git, и запускаются в CI; 605 взяты из наборов тестов самого git, libgit2, go-git, isomorphic-git, dulwich и JGit.

Полнотекстовый поиск

blame, grep, bisect, notes и фильтр журнала по пути — без вызова git из командной оболочки.

Почему Pitmaster

Работа без установленного git

Коммиты, различия, состояние и история вычисляются в PHP, поэтому контейнеры и хосты без бинарного файла git всё равно могут работать с репозиториями.

Дескрипторы без запуска процессов

Pitmaster::processFreeOptions() отключает хуки, хуки fsmonitor, клонирование, получение и отправку данных, а также транспорт SSH с запуском процессов. Локальное чтение и запись продолжают работать.

Сверка с git

Интеграционные тесты запускаются с бинарным файлом git, а матрица поддержки показывает, что 146 функций 146, относящихся к проекту, проверены оракулом в заявленных пределах паритета.

SHA-1 и SHA-256

Создайте репозиторий SHA-256 с помощью Pitmaster::init($path, 'sha256') или init --object-format=sha256. Pack-файлы можно читать и записывать; файлы commit-graph, multi-pack index и reftable можно читать.

Сравнение с

Другие способы работы с репозиториями Git из PHP и отличия Pitmaster.

Pitmaster в сравнении с другими инструментами
git (командная строка) Подходит дляЭталонная реализация с обширным набором команд, охватывающим высокоуровневые операции и полный доступ к внутренним компонентам. Отличия от PitmasterPitmaster выполняется в процессе PHP, а основные операции не вызывают git из командной оболочки. Его CLI поддерживает только подмножество команд git.
czproject/git-php Подходит дляКомпактный клиент PHP API для init, clone, commit, merge, веток, тегов и удалённых репозиториев. Работает на PHP 8.0 или новее и использует установленный клиент git. Отличия от PitmasterДля основных операций Pitmaster не нужен клиент git: он сам читает и записывает объекты, pack-файлы и индекс. Требуется PHP 8.2 или новее.
gitonomy/gitlib Подходит дляДоступ к репозиториям из PHP 8.4 или новее без необходимости что-либо собирать. Работает, выполняя команды оболочки для git. Отличия от PitmasterPitmaster не вызывает команды оболочки для основных операций, а дескриптор без запуска процессов отключает функции, которые запускали бы процесс.
libgit2 Подходит дляПереносимая реализация основного функционала Git на C в виде подключаемой библиотеки со связками для Ruby, .NET, Python, Node.js, Rust и других языков. Отличия от PitmasterPitmaster — обычный PHP, устанавливаемый через Composer, без скомпилированной библиотеки и FFI. 63 сценария оракула импортированы из тестовых ресурсов libgit2.

Источники, отмечено

Вопросы и ответы

Краткие ответы из документации Pitmaster.

Начните с руководства для начинающих, чтобы открыть свой первый репозиторий из PHP, а затем обратитесь к справочникам API и CLI.