Saltar al contenido

Pitmaster

Git en PHP: lee y escribe repositorios, calcula diferencias, fusiona y se comunica mediante HTTP inteligente sin invocar git desde la línea de comandos.

Terminal
composer require pitmaster/pitmaster

Última versión v0.2.11 MIT PHP 8.2+

En la práctica

Abre un repositorio y luego léelo y modifícalo con llamadas a métodos o desde la línea de comandos.

Lee un repositorio desde PHP

Pitmaster::open() localiza el directorio .git y devuelve un manejador del repositorio. Cada entrada de estado tiene un estado independiente para el índice y el árbol de trabajo.

Desde la línea de comandos, ./vendor/bin/pitmaster replica un subconjunto de los comandos de git y funciona con una instalación Composer, ya que 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";
}

Sin binario de git

Las operaciones principales se ejecutan en PHP 8.2+ sin binario de git ni FFI. Los hooks y el modo alternativo de SSH inician procesos, salvo que pases ['hooks' => false] o processFreeOptions().

Lectura y escritura

Objetos sueltos, archivos pack con resolución de deltas, el índice, las referencias y la configuración. git lee lo que escribe Pitmaster para las versiones 2 y 3 del índice y las referencias sueltas.

Diferencias y fusiones

Diferencias con Myers, patience e histogram, y detección de renombrados. Fusión de tres vías con marcadores de conflicto.

Protocolo de red

Clona, obtiene y envía cambios mediante HTTP o SSH inteligente, con un modo alternativo HTTP simple para clonar y obtener cambios. El protocolo v2 está disponible mediante los clientes de nivel inferior.

Operaciones Git

añadir, confirmar, consultar el estado, comparar cambios, fusionar, cambiar de rama, restablecer, guardar cambios temporalmente, aplicar confirmaciones seleccionadas, revertir, reorganizar el historial, consultar quién modificó cada línea, buscar.

CLI

22 comandos al estilo de git, incluidos init, log, status, diff, add, commit, branch, merge, stash, blame y grep. Clonar, obtener y enviar cambios solo está disponible en la biblioteca.

Probado con oráculo

761 escenarios comparan los resultados con salidas capturadas de git real y se ejecutan en CI; 605 proceden de las suites de pruebas de git, libgit2, go-git, isomorphic-git, dulwich y JGit.

Búsqueda completa

Blame, grep, bisect, notas y filtro de rutas del registro, sin invocar git desde la línea de comandos.

Por qué Pitmaster

Funciona sin instalar git

Los commits, las diferencias, el estado y el historial se calculan en PHP, así que los contenedores y servidores sin un binario de git pueden trabajar con repositorios.

Manejadores sin procesos

Pitmaster::processFreeOptions() desactiva los hooks, los hooks de fsmonitor, clone, fetch, push y el transporte de procesos SSH. Las lecturas y escrituras locales siguen funcionando.

Verificado con git

Las pruebas de integración se ejecutan con el binario git, y la matriz de compatibilidad contabiliza 146 de las funciones incluidas en el alcance de 146 como verificadas mediante un oráculo, dentro del alcance de paridad declarado.

SHA-1 y SHA-256

Cree un repositorio SHA-256 con Pitmaster::init($path, 'sha256') o init --object-format=sha256. Los archivos de paquete se leen y escriben; los archivos commit-graph, multi-pack index y reftable se pueden leer.

Comparación con

Otras formas de trabajar con repositorios Git desde PHP y en qué se diferencia Pitmaster.

Pitmaster en comparación con otras herramientas
git (línea de comandos) Ideal paraLa implementación de referencia, con un amplio conjunto de comandos que abarca tanto operaciones de alto nivel como acceso completo a los componentes internos. Diferencia con PitmasterPitmaster se ejecuta dentro del proceso PHP y las operaciones principales no llaman a git desde la shell. Su CLI solo reproduce un subconjunto de los comandos de git.
czproject/git-php Ideal paraUn PHP API compacto para init, clone, commit, merge, ramas, etiquetas y repositorios remotos. Se ejecuta en PHP 8.0 o posterior y utiliza el cliente git instalado. Diferencia con PitmasterPitmaster no necesita un cliente git para las operaciones principales, porque lee y escribe los objetos, los archivos de paquete y el índice directamente. Requiere PHP 8.2 o posterior.
gitonomy/gitlib Ideal paraAcceso a repositorios desde PHP 8.4 o posterior, sin necesidad de compilar nada. Funciona mediante llamadas a git desde la shell. Diferencia con PitmasterPitmaster no realiza llamadas a la shell para las operaciones principales, y un controlador sin procesos desactiva las partes que iniciarían un proceso.
libgit2 Ideal paraImplementación portable en C de los métodos principales de Git como biblioteca enlazable, con enlaces para Ruby, .NET, Python, Node.js, Rust y más. Diferencia con PitmasterPitmaster es PHP puro, instalado con Composer, sin biblioteca compilada ni FFI. Importa 63 de sus escenarios de oráculo de los recursos de prueba de libgit2.

Preguntas y respuestas

Respuestas breves de la documentación de Pitmaster.

Empiece con la guía de inicio para abrir su primer repositorio desde PHP y luego consulte las referencias de API y CLI para lo demás.