Към съдържанието

Pitmaster

Git в PHP: четене и запис на хранилища, diff, сливане и работа със smart HTTP без стартиране на git чрез shell.

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

Последна версия v0.2.11 MIT PHP 8.2+

На практика

Отворете хранилище, след което го четете и записвайте чрез извиквания на методи или от shell.

Четене на хранилище от PHP

Pitmaster::open() намира директорията .git и връща манипулатор към хранилището. Всеки запис за статуса съдържа отделно състояние за индекса и работното дърво.

От shell ./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. Hooks и резервният вариант с SSH стартират процеси, освен ако не подадете ['hooks' => false] или processFreeOptions().

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

Свободни обекти, pack файлове с разрешаване на delta, индекс, refs и конфигурация. git прочита записаното от Pitmaster за версии 2 и 3 на индекса и свободни refs.

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. Клонирането, извличането и изпращането са достъпни само в библиотеката.

Проверено с Oracle

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

Пълнотекстово търсене

Blame, grep, bisect, notes и филтър по път в журнала, без стартиране на git чрез shell.

Защо Pitmaster

Работи без инсталиран git

Commit, diff, статусът и историята се изчисляват в PHP, така че контейнери и хостове без двоичен файл на git също могат да работят с хранилища.

Манипулатори без процеси

Pitmaster::processFreeOptions() изключва hooks, hooks на fsmonitor, клониране, извличане, изпращане и транспорт на процеси SSH. Четенето и записването локално продължават да работят.

Проверено спрямо git

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

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 чрез shell. Неговият CLI предоставя подмножество от командите на git.
czproject/git-php Подходящ заКомпактна PHP API за init, clone, commit, merge, клонове, тагове и отдалечени хранилища. Работи с PHP 8.0 или по-нова версия и управлява инсталирания клиент на git. Разлики спрямо PitmasterPitmaster не се нуждае от клиент на git за основните операции, защото чете и записва обекти, pack файлове и индекса самостоятелно. Изисква PHP 8.2 или по-нова версия.
gitonomy/gitlib Подходящ заДостъп до хранилища от PHP 8.4 или по-нова версия, без нужда от компилиране. Работи чрез извикване на команди на git чрез shell. Разлики спрямо PitmasterPitmaster не извършва извиквания чрез shell за основните операции, а манипулаторът без процеси изключва функциите, които биха стартирали процес.
libgit2 Подходящ заПреносима реализация на основните методи на Git на C като свързваема библиотека, с обвързвания за Ruby, .NET, Python, Node.js, Rust и други. Разлики спрямо PitmasterPitmaster е чист PHP, инсталиран с Composer, без компилирана библиотека или FFI. Внася 63 от сценариите си с Oracle от тестовите ресурси на libgit2.

Източници, отметнато

Въпроси и отговори

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

Започнете с ръководството за първи стъпки, за да отворите първото си хранилище от PHP, след което използвайте справочниците за API и CLI за останалото.