İçeriğe geç

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
  • zlib uzantısı (neredeyse tüm PHP kurulumlarında yerleşik)
  • json uzantısı
  • mbstring uzantısı (composer.json içinde bildirilmiştir; bu nedenle Composer kurulum sırasında bunu gerektirir)
  • ctype uzantısı (nesne hash'lerini doğrulamak için kullanılır; çoğu PHP derlemesinde etkindir, ancak composer.json iç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

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";
}

// 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.