Giriş
Pitmaster, Git depolarını yerel olarak okuyup yazan saf bir PHP kütüphanesidir. Temel depo işlemleri git ikili dosyasını harici komut olarak çalıştırmaz ve FFI kullanmaz. Git nesne modeli, pack dosyası biçimi, indeks biçimi ve akıllı HTTP aktarımı PHP ile uygulanmıştır.
Pitmaster neden var
Git depolarıyla etkileşime giren PHP uygulamaları genellikle git ikili dosyasını harici komut olarak çalıştırır. Bu yöntem işe yarar, ancak git'ün kurulu olmasını zorunlu kılar, exec() ve proc_open() çevresinde güvenlik sorunları yaratır ve uygulamanın kısıtlı ortamlara (git içermeyen kapsayıcılar, paylaşımlı barındırma, sunucusuz işlevler) dağıtımını zorlaştırır.
Pitmaster, temel depo işlemleri için git bağımlılığını ortadan kaldırır. PHP uygulamanız, yalnızca PHP'ün yerleşik işlevlerini kullanarak commit geçmişini okuyabilir, commit oluşturabilir, farkları hesaplayabilir, durumu denetleyebilir ve akıllı HTTP üzerinden uzak depolara push yapabilir. Kancalar ve SSH aktarımı istisnadır: ikisi de süreç başlatır ve her depo tanıtıcısı için devre dışı bırakılabilir (Kancalar bölümüne bakın).
Ne yapar?
- Gevşek nesneleri (blob, tree, commit, tag) okur ve yazar
- Pack dosyalarını okur ve delta zincirlerini çözümler (OFS_DELTA ve REF_DELTA)
- Ağ işlemleri için pack dosyaları yazar
- İndeksi/evreleme alanını okur ve yazar (v2, v3, v4 biçimleri)
- Ref'leri okur ve yazar (dallar, etiketler, HEAD, packed-refs, reftable)
- git'nin birleşik biçiminde farkları hesaplar (Myers, Patience, Histogram ve Minimal algoritmaları)
- Çakışma algılamalı üç yönlü birleştirme yapar
- Commit grafiklerini dolaşır (log, ata ilişkisi, birleştirme tabanı)
- Git akıllı HTTP protokolünü kullanır (clone, fetch, push)
- Çalışma ağaçlarını, alt modülleri, stash'i, kancaları ve Git LFS destekler
Gereksinimler
- PHP 8.2 veya üzeri
zlibuzantısı (neredeyse tüm PHP kurulumlarında yerleşik)jsonuzantısımbstringuzantısı (composer.jsoniçinde bildirilmiştir; bu nedenle Composer kurulum sırasında bunu gerektirir)ctypeuzantısı (nesne hash'lerini doğrulamak için kullanılır; çoğu PHP derlemesinde etkindir, ancakcomposer.jsoniçinde bildirilmemiştir)
Temel depo işlemleri git ikili dosyasını gerektirmez. İsteğe bağlı özellikler ek çalışma zamanı yetenekleri gerektirebilir: kanca yürütme proc_open() kullanır; SSH aktarımıysa yüklüyse ext-ssh2 kullanır, aksi durumda sistemin ssh ikili dosyasını proc_open() üzerinden başlatır.
Hızlı örnek
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";
}
// Create a commit
$repo->add('src/Feature.php');
$commitId = $repo->commit('Add new feature');
Başlarken ile başlayın; ardından diğer konular için API, CLI ve İşlemler bölümlerine bakın. Testler bölümü, Pitmaster'ün git karşısında nasıl denetlendiğini açıklar.