Pitmaster
PHP içinde Git: depoları okuyup yazın, diff alın, birleştirin ve kabuk komutu çalıştırmadan akıllı HTTP üzerinden iletişim kurun: git kullanmayın.
composer require pitmaster/pitmasterEn son sürüm 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/oldUygulamada
Bir depoyu açın, ardından yöntem çağrılarıyla veya kabuktan okuyup yazın.
PHP üzerinden depo okuma
Pitmaster::open(), .git dizinini bulur ve bir depo tanıtıcısı döndürür. Her durum girdisi, dizin ve çalışma ağacı için ayrı bir durum taşır.
Kabuktan ./vendor/bin/pitmaster, git komutlarının bir alt kümesini yansıtır ve 0.2.11 olduğundan Composer kurulumuyla çalışır.
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 featuregit ikilisi yok
Temel işlemler PHP 8.2+ üzerinde, git ikilisi veya FFI olmadan çalışır. Kancalar ve SSH geri dönüşü, ['hooks' => false] veya processFreeOptions() iletilmediğinde süreç başlatır.
Okuma ve Yazma
Gevşek nesneler, delta çözümlemeli paket dosyaları, dizin, başvurular ve yapılandırma. git, dizin 2 ve 3 sürümleri ile gevşek başvurular için Pitmaster tarafından yazılanları okur.
Diff ve Birleştirme
Yeniden adlandırma algılamalı Myers, patience ve histogram diff'leri. Çakışma işaretleyicili üç yönlü birleştirme.
Ağ Protokolü
Akıllı HTTP veya SSH üzerinden klonlama, getirme ve gönderme; klonlama ve getirme için geri dönüş olarak basit HTTP kullanılır. Protokol v2, alt düzey istemciler aracılığıyla kullanılabilir.
Git İşlemleri
ekleme, commit, durum, fark, birleştirme, dal değiştirme, sıfırlama, rafa kaldırma, seçerek taşıma, geri alma, yeniden tabanlama, sorumluluk geçmişi, arama.
CLI
init, log, status, diff, add, commit, branch, merge, stash, blame ve grep dahil 22 git tarzı komut. Clone, fetch ve push yalnızca kitaplıkta kullanılabilir.
Oracle ile Test Edildi
761 senaryosu, sonuçları gerçek git çıktılarıyla karşılaştırır ve CI'da çalışır; 605, git uygulamasının kendi test paketinden, libgit2, go-git, isomorphic-git, dulwich ve JGit kaynaklarından gelir.
Tam Arama
git kabuk komutu çalıştırmadan blame, grep, bisect, notes ve günlük yol filtresi.
Pitmaster neden tercih edilmeli
git kurulumu olmadan çalışır
Commit'ler, diff'ler, durum ve geçmiş PHP içinde hesaplanır; böylece git ikilisi olmayan konteyner ve sunucularda da depolarla çalışılabilir.
Süreç başlatmayan tanıtıcılar
Pitmaster::processFreeOptions(); kancaları, fsmonitor kancalarını, clone, fetch ve push işlemlerini ve SSH süreç aktarımını devre dışı bırakır. Yerel okuma ve yazma işlemleri çalışmaya devam eder.
git ile karşılaştırılarak denetlendi
Entegrasyon testleri git ikili dosyasına karşı çalıştırılır ve destek matrisi, kapsam dahilindeki 146 özellikten 146 tanesinin belirtilen eşdeğerlik kapsamı içinde oracle tarafından doğrulandığını gösterir.
SHA-1 ve SHA-256
Pitmaster::init($path, 'sha256') ile veya init --object-format=sha256 kullanarak bir SHA-256 deposu oluşturun. Pack dosyaları okunup yazılır; commit-graph, multi-pack index ve reftable dosyaları okunabilir.
Karşılaştırma
PHP üzerinden Git depolarıyla çalışmanın diğer yolları ve Pitmaster farkı.
| Araç | Şu konularda başarılı | Pitmaster ile farkı |
|---|---|---|
| git (komut satırı) | Şu konularda başarılıHem üst düzey işlemleri hem de dahili bileşenlere tam erişimi kapsayan zengin bir komut kümesine sahip referans uygulama. | Pitmaster ile farkıPitmaster, PHP sürecinde çalışır ve temel işlemler git için kabuk komutu çalıştırmaz. CLI, yalnızca git komutlarının bir alt kümesini yansıtır. |
| czproject/git-php | Şu konularda başarılıinit, clone, commit, merge, branches, tags ve remotes için kompakt bir PHP API. PHP 8.0 veya üstünde çalışır ve kurulu git istemcisini kullanır. | Pitmaster ile farkıPitmaster temel işlemler için git istemcisine ihtiyaç duymaz; nesneleri, paket dosyalarını ve dizini doğrudan okuyup yazar. PHP 8.2 veya üzeri gerekir. |
| gitonomy/gitlib | Şu konularda başarılıDerleme gerektirmeden PHP 8.4 veya üstünden depo erişimi. git için kabuk çağrıları yaparak çalışır. | Pitmaster ile farkıPitmaster temel işlemler için kabuk çağrısı yapmaz; süreç başlatmayan bir tanıtıcı, süreç başlatacak bölümleri devre dışı bırakır. |
| libgit2 | Şu konularda başarılıBağlanabilir bir kitaplık olarak sunulan, Git temel yöntemlerinin taşınabilir bir C uygulaması; Ruby, .NET, Python, Node.js, Rust ve diğerleri için bağlamalar içerir. | Pitmaster ile farkıPitmaster, Composer ile kurulan, derlenmiş kitaplık veya FFI içermeyen yalın bir PHP uygulamasıdır. Oracle senaryolarının 63'ünü libgit2 test kaynaklarından alır. |
Kaynaklar, işaretli
Sorular ve yanıtlar
Pitmaster dokümantasyonundan kısa yanıtlar.
Hayır. Temel depo işlemleri git ikili dosyasını veya FFI'yi kullanmaz. Nesneler, başvurular, pack dosyaları, indeks ve akıllı HTTP, PHP içinde işlenir.
Evet. Depoyu açarken Pitmaster::processFreeOptions() veya ['processes' => false] seçeneğini iletin. Bu durumda hook'lar, clone, fetch, push ve SSH süreç aktarımı devre dışı kalırken yerel okuma ve yazma işlemleri kullanılabilir.
Evet, hook'lar varsayılan olarak etkin kalır ve proc_open() üzerinden çalışır. Bu tanıtıcı için .git/hooks içindeki betikleri atlamak üzere Pitmaster::open(), Pitmaster::init() veya Pitmaster::clone() kullanırken ['hooks' => false] iletin.
Pitmaster::clone(), fetch() ve push(), SSH URL'leri için SSH, diğer durumlarda akıllı HTTP kullanır; akıllı alışveriş başarısız olursa clone ve fetch, akıllı olmayan HTTP aktarımına geri döner. SSH, yüklüyse ssh2 uzantısını, değilse sistemin ssh ikili dosyasını kullanır.
Evet. Pitmaster::init() için ikinci bağımsız değişken olarak 'sha256' iletin veya init komutunu --object-format=sha256 ile çalıştırın. Böylece nesneler 64 karakterlik karma değerleri kullanır.
Hayır. log, status, diff, commit, merge, blame ve grep gibi git komutlarının bir alt kümesini yansıtır. Clone, fetch ve push yalnızca PHP API üzerinden kullanılabilir.
İlk deponuzu PHP üzerinden açmak için başlangıç kılavuzunu izleyin; geri kalan konular için API ve CLI başvurularını kullanın.