Pitmaster
Git في PHP: قراءة المستودعات وكتابتها، ومقارنة التغييرات ودمجها، والتواصل عبر HTTP الذكي دون استدعاء git من الصدفة.
composer require pitmaster/pitmasterأحدث إصدار 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/oldفي التطبيق العملي
افتح مستودعًا، ثم اقرأه واكتب فيه باستخدام استدعاءات الأساليب أو من الصدفة.
قراءة مستودع من PHP
تحدد Pitmaster::open() موقع مجلد .git وتعيد مقبضًا للمستودع. وتحمل كل خانة حالة منفصلة للفهرس وشجرة العمل.
من الصدفة، تحاكي ./vendor/bin/pitmaster مجموعة فرعية من أوامر git وتعمل منذ الإصدار 0.2.11 عند التثبيت باستخدام Composer.
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 featureبلا ملف git ثنائي
تعمل العمليات الأساسية في PHP 8.2+ دون ملف git ثنائي أو FFI. تبدأ الخطافات والبديل الاحتياطي لـ SSH عملياتٍ ما لم تمرّر ['hooks' => false] أو processFreeOptions().
القراءة والكتابة
كائنات منفصلة، وملفات pack مع حلّ الفروق، والفهرس، والمراجع والإعدادات. يقرأ git ما تكتبه Pitmaster لإصداري الفهرس 2 و3 والمراجع المنفصلة.
مقارنة التغييرات والدمج
مقارنات Myers وpatience وhistogram مع اكتشاف إعادة التسمية. ودمج ثلاثي الاتجاهات مع علامات التعارض.
بروتوكول الشبكة
استنسخ واجلب وادفع عبر HTTP الذكي أو SSH، مع بديل HTTP محدود للاستنساخ والجلب. يتوفر البروتوكول v2 عبر العملاء منخفضي المستوى.
عمليات Git
add وcommit وstatus وdiff وmerge وcheckout وreset وstash وcherry-pick وrevert وrebase وblame وgrep.
CLI
22 أمرًا بأسلوب git، منها init وlog وstatus وdiff وadd وcommit وbranch وmerge وstash وblame وgrep. الاستنساخ والجلب والدفع متاحة عبر المكتبة فقط.
مختبَر بالمرجع
تقارن 761 سيناريو النتائج بمخرجات ملتقطة من git الحقيقي، وتُشغّل في CI؛ 605 منها مأخوذة من مجموعات اختبارات git نفسه وlibgit2 وgo-git وisomorphic-git وdulwich وJGit.
بحث شامل
blame وgrep وbisect وnotes ومرشح لمسارات السجل، دون استدعاء git من الصدفة.
لماذا Pitmaster؟
تعمل دون تثبيت git
تُحسب الالتزامات والفروق والحالة والسجل في PHP، لذا تظل المستودعات قابلة للاستخدام في الحاويات والمضيفات التي لا تحتوي على ملف git ثنائي.
مقابض بلا عمليات
تعطّل Pitmaster::processFreeOptions() الخطافات وخطافات fsmonitor والاستنساخ والجلب والدفع ونقل SSH عبر العمليات. وتظل القراءة والكتابة المحلية متاحة.
تم التحقق منها بمقارنتها مع git
تُشغّل اختبارات التكامل باستخدام ملف git الثنائي، وتحتسب مصفوفة الدعم 146 من أصل 146 ميزة ضمن النطاق على أنها متحقق منها بالمرجع ضمن نطاق التكافؤ المعلن.
SHA-1 وSHA-256
أنشئ مستودع SHA-256 باستخدام Pitmaster::init($path, 'sha256') أو init --object-format=sha256. تُقرأ ملفات pack وتُكتب؛ ويمكن قراءة ملفات commit-graph وmulti-pack index وreftable.
مقارنة مع
طرق أخرى للعمل مع مستودعات Git من PHP، وأوجه اختلاف Pitmaster.
| الأداة | مناسب لـ | الاختلاف عن Pitmaster |
|---|---|---|
| git (سطر الأوامر) | مناسب لـالتنفيذ المرجعي، مع مجموعة أوامر غنية تغطي العمليات عالية المستوى والوصول الكامل إلى الأجزاء الداخلية. | الاختلاف عن Pitmasterتعمل Pitmaster داخل عملية PHP، ولا تستدعي العمليات الأساسية git من الصدفة. ولا تحاكي CLI سوى مجموعة فرعية من أوامر git. |
| czproject/git-php | مناسب لـمكتبة PHP موجزة بلغة API للتهيئة والاستنساخ والالتزام والدمج والفروع والوسوم والمستودعات البعيدة. تعمل على PHP 8.0 أو أحدث، وتستخدم عميل git المثبّت. | الاختلاف عن Pitmasterلا تحتاج Pitmaster إلى عميل git للعمليات الأساسية، لأنها تقرأ الكائنات وملفات pack والفهرس وتكتبها بنفسها. وتتطلب PHP 8.2 أو أحدث. |
| gitonomy/gitlib | مناسب لـالوصول إلى المستودعات باستخدام PHP 8.4 أو أحدث دون الحاجة إلى إنشاء شيء. تعمل باستدعاء git من الصدفة. | الاختلاف عن Pitmasterلا تجري Pitmaster استدعاءات للصدفة في العمليات الأساسية، ويعطّل المقبض الخالي من العمليات الأجزاء التي تبدأ عملية. |
| libgit2 | مناسب لـتنفيذ محمول بلغة C للطرق الأساسية في Git، كمكتبة قابلة للربط، مع واجهات لـ Ruby و.NET وPython وNode.js وRust وغيرها. | الاختلاف عن PitmasterPitmaster هي PHP عادية تُثبّت باستخدام Composer، ولا تحتاج إلى مكتبة مترجمة أو FFI. تستورد 63 من سيناريوهاتها المرجعية من موارد اختبارات libgit2. |
الأسئلة والأجوبة
إجابات موجزة من توثيق Pitmaster.
لا. لا تستخدم عمليات المستودعات الأساسية ملف git الثنائي أو FFI. وتُدار الكائنات والمراجع وملفات pack والفهرس وHTTP الذكي في PHP.
نعم. مرّر Pitmaster::processFreeOptions() أو ['processes' => false] عند فتح المستودع. عندها تُعطّل الخطافات والاستنساخ والجلب والدفع ونقل SSH عبر العمليات، مع استمرار إتاحة القراءة والكتابة المحلية.
نعم، تظل الخطافات مفعّلة افتراضيًا وتعمل عبر proc_open(). مرّر ['hooks' => false] إلى Pitmaster::open() أو Pitmaster::init() أو Pitmaster::clone() لتجاوز النصوص البرمجية في .git/hooks لهذا المقبض.
تستخدم Pitmaster::clone() وfetch() وpush() SSH لعناوين SSH وHTTP الذكي فيما عدا ذلك، ويلجأ الاستنساخ والجلب إلى HTTP غير الذكي إذا فشل التبادل الذكي. يستخدم SSH إضافة ssh2 إذا كانت محمّلة، وإلا فيستخدم ملف ssh الثنائي في النظام.
نعم. مرّر 'sha256' كوسيط ثانٍ إلى Pitmaster::init()، أو شغّل init مع --object-format=sha256. عندها تستخدم الكائنات تجزئات من 64 حرفًا.
لا. تحاكي مجموعة فرعية من أوامر git، مثل log وstatus وdiff وcommit وmerge وblame وgrep. ولا يتوفر الاستنساخ والجلب والدفع إلا عبر PHP API.
ابدأ بدليل البدء السريع لفتح أول مستودع لك من PHP، ثم استخدم مرجعي API وCLI لبقية المهام.