Pitmaster
Git di PHP: membaca dan menulis repositori, melakukan diff dan merge, serta berbicara melalui HTTP cerdas tanpa menjalankan git lewat shell.
composer require pitmaster/pitmasterRilis terbaru 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/oldDalam praktik
Buka repositori, lalu baca dan tulis dengan pemanggilan metode atau dari shell.
Baca repositori dari PHP
Pitmaster::open() menemukan direktori .git dan mengembalikan handle repositori. Setiap entri status memiliki status terpisah untuk indeks dan pohon kerja.
Dari shell, ./vendor/bin/pitmaster menyediakan sebagian perintah git dan dapat digunakan dengan instalasi Composer karena 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 featureTanpa Biner git
Operasi inti berjalan di PHP 8.2+ tanpa biner git atau FFI. Hook dan fallback SSH memulai proses kecuali Anda memberikan ['hooks' => false] atau processFreeOptions().
Baca & Tulis
Objek lepas, berkas pack dengan resolusi delta, indeks, referensi, dan konfigurasi. git membaca apa yang ditulis Pitmaster untuk indeks versi 2 dan 3 serta referensi lepas.
Diff & Merge
Diff Myers, patience, dan histogram dengan deteksi penggantian nama. Merge tiga arah dengan penanda konflik.
Protokol Jaringan
Clone, fetch, dan push melalui HTTP atau SSH cerdas, dengan fallback HTTP biasa untuk clone dan fetch. Protokol v2 tersedia melalui klien tingkat rendah.
Operasi Git
tambah, commit, status, diff, merge, checkout, reset, stash, cherry-pick, revert, rebase, blame, grep.
CLI
22 perintah bergaya git, termasuk init, log, status, diff, add, commit, branch, merge, stash, blame, dan grep. Clone, fetch, dan push hanya tersedia melalui pustaka.
Diuji dengan Oracle
761 skenario membandingkan hasil dengan keluaran yang diambil dari git sungguhan dan dijalankan di CI; 605 berasal dari rangkaian pengujian git sendiri, libgit2, go-git, isomorphic-git, dulwich, dan JGit.
Pencarian Lengkap
Blame, grep, bisect, notes, dan filter jalur log, tanpa menjalankan git lewat shell.
Mengapa Pitmaster
Berjalan tanpa instalasi git
Commit, diff, status, dan riwayat dihitung dalam PHP, sehingga kontainer dan host tanpa biner git tetap dapat bekerja dengan repositori.
Handle tanpa proses
Pitmaster::processFreeOptions() menonaktifkan hook, hook fsmonitor, clone, fetch, push, dan transport proses SSH. Pembacaan dan penulisan lokal tetap berfungsi.
Diperiksa terhadap git
Tes integrasi dijalankan terhadap biner git, dan matriks dukungan menghitung 146 dari 146 fitur yang termasuk dalam cakupan sebagai terverifikasi oracle dalam cakupan paritas yang dinyatakan.
SHA-1 dan SHA-256
Buat repositori SHA-256 dengan Pitmaster::init($path, 'sha256') atau init --object-format=sha256. Berkas pack dibaca dan ditulis; berkas commit-graph, multi-pack index, dan reftable dapat dibaca.
Dibandingkan dengan
Cara lain untuk bekerja dengan repositori Git dari PHP, dan perbedaan Pitmaster.
| Alat | Keunggulan | Perbedaan dengan Pitmaster |
|---|---|---|
| git (baris perintah) | KeunggulanImplementasi acuan, dengan rangkaian perintah lengkap yang mencakup operasi tingkat tinggi serta akses penuh ke internal. | Perbedaan dengan PitmasterPitmaster berjalan di dalam proses PHP dan operasi intinya tidak menjalankan git lewat shell. CLI hanya menyediakan sebagian perintah git. |
| czproject/git-php | KeunggulanPHP API ringkas untuk init, clone, commit, merge, branch, tag, dan remote. Berjalan pada PHP 8.0 atau lebih baru dan menggunakan klien git yang terpasang. | Perbedaan dengan PitmasterPitmaster tidak memerlukan klien git untuk operasi inti karena membaca dan menulis objek, berkas pack, dan indeks sendiri. Memerlukan PHP 8.2 atau lebih baru. |
| gitonomy/gitlib | KeunggulanAkses repositori dari PHP 8.4 atau lebih baru tanpa perlu membangun apa pun. Cara kerjanya dengan menjalankan perintah shell ke git. | Perbedaan dengan PitmasterPitmaster tidak menjalankan perintah shell untuk operasi inti, dan handle tanpa proses menonaktifkan bagian yang akan memulai proses. |
| libgit2 | KeunggulanImplementasi portabel metode inti Git dalam C sebagai pustaka yang dapat ditautkan, dengan binding untuk Ruby, .NET, Python, Node.js, Rust, dan lainnya. | Perbedaan dengan PitmasterPitmaster adalah PHP biasa yang dipasang dengan Composer, tanpa pustaka terkompilasi atau FFI. Sebanyak 63 skenario oraclenya diimpor dari sumber daya pengujian libgit2. |
Sumber, dicentang
Tanya jawab
Jawaban singkat dari dokumentasi Pitmaster.
Tidak. Operasi inti repositori tidak menggunakan biner git atau FFI. Objek, referensi, berkas pack, indeks, dan HTTP cerdas ditangani dalam PHP.
Bisa. Berikan Pitmaster::processFreeOptions() atau ['processes' => false] saat membuka repositori. Hook, clone, fetch, push, dan transport proses SSH akan dinonaktifkan, sedangkan pembacaan dan penulisan lokal tetap tersedia.
Ya, hook tetap aktif secara default dan dijalankan melalui proc_open(). Berikan ['hooks' => false] ke Pitmaster::open(), Pitmaster::init(), atau Pitmaster::clone() untuk melewati skrip di .git/hooks untuk handle tersebut.
Pitmaster::clone(), fetch(), dan push() menggunakan SSH untuk URL SSH dan HTTP cerdas untuk yang lain; clone dan fetch beralih ke HTTP biasa jika pertukaran cerdas gagal. SSH menggunakan ekstensi ssh2 jika dimuat, dan biner ssh sistem jika tidak.
Ya. Berikan 'sha256' sebagai argumen kedua ke Pitmaster::init(), atau jalankan init dengan --object-format=sha256. Objek kemudian menggunakan hash 64 karakter.
Tidak. Pustaka ini mencerminkan sebagian perintah git, seperti log, status, diff, commit, merge, blame, dan grep. Clone, fetch, dan push hanya tersedia melalui PHP API.
Mulailah dengan panduan memulai untuk membuka repositori pertama Anda dari PHP, lalu gunakan referensi API dan CLI untuk selebihnya.