Перейти до вмісту

Pitmaster

Git у PHP: читання й запис репозиторіїв, diff, злиття та обмін через smart 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 із розв’язанням delta, індекс, посилання та конфігурація. git читає те, що записує Pitmaster, для версій індексу 2 і 3 та окремих посилань.

Diff і злиття

Алгоритми diff Myers, patience та histogram із виявленням перейменувань. Тристороннє злиття з маркерами конфліктів.

Мережевий протокол

Клонування, отримання й надсилання через smart HTTP або SSH, із резервним dumb 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

Коміти, diff, статус і журнал обчислюються в 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.