Pitmaster
Git в PHP: четене и запис на хранилища, diff, сливане и работа със smart HTTP без стартиране на git чрез shell.
composer require pitmaster/pitmasterПоследна версия v0.2.11 MIT PHP 8.2+
# List all branches (current marked with *)
./bin/pitmaster branch
# Create a new branch from HEAD
./bin/pitmaster branch feature/new-thing
# Delete a branch
./bin/pitmaster branch -d feature/old
./bin/pitmaster branch -D feature/oldНа практика
Отворете хранилище, след което го четете и записвайте чрез извиквания на методи или от shell.
Четене на хранилище от PHP
Pitmaster::open() намира директорията .git и връща манипулатор към хранилището. Всеки запис за статуса съдържа отделно състояние за индекса и работното дърво.
От shell ./vendor/bin/pitmaster предоставя подмножество от командите на git и работи при инсталация на Composer, тъй като 0.2.11.
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";
}./vendor/bin/pitmaster log
./vendor/bin/pitmaster status
./vendor/bin/pitmaster diff
./vendor/bin/pitmaster show HEAD
./vendor/bin/pitmaster add file.txt
./vendor/bin/pitmaster commit -m "message"
./vendor/bin/pitmaster branch feature
./vendor/bin/pitmaster checkout feature
./vendor/bin/pitmaster merge featureБез двоичен файл на 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.
Не. Основните операции с хранилището не използват двоичния файл на git или FFI. Обектите, refs, pack файловете, индексът и smart HTTP се обработват в PHP.
Да. Подайте Pitmaster::processFreeOptions() или ['processes' => false], когато отваряте хранилището. Hooks, клонирането, извличането, изпращането и транспортът на процеси SSH ще бъдат изключени, а локалното четене и запис ще останат достъпни.
Да, hooks са включени по подразбиране и се изпълняват чрез proc_open(). Подайте ['hooks' => false] на Pitmaster::open(), Pitmaster::init() или Pitmaster::clone(), за да пропуснете скриптовете в .git/hooks за този манипулатор.
Pitmaster::clone(), fetch() и push() използват SSH за URL адреси SSH, а в останалите случаи — smart HTTP; при неуспешен smart обмен клонирането и извличането преминават към dumb HTTP. SSH използва разширението ssh2, когато е заредено, а в противен случай — системния двоичен файл на ssh.
Да. Подайте 'sha256' като втори аргумент на Pitmaster::init() или изпълнете init с --object-format=sha256. Тогава обектите ще използват хешове с дължина 64 знака.
Не. Предоставя подмножество от командите на git, като log, status, diff, commit, merge, blame и grep. Клонирането, извличането и изпращането са достъпни само чрез PHP API.
Започнете с ръководството за първи стъпки, за да отворите първото си хранилище от PHP, след което използвайте справочниците за API и CLI за останалото.