سير عمل Git لمطور PHP: من الفوضى إلى الكود النظيف

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

سير عمل Git لمطوري PHP: كيف تتوقف عن الخوف من التعارضات وتحب مراجعة الكود

\n\n

هل سبق لك أن أمضيت نصف يوم في دمج الفروع، لتحصل في النهاية على "خطأ فادح" في بيئة الإنتاج؟ أو ربما قام زميلك بدفع كود "خام" عن طريق الخطأ مباشرة إلى master، وعرفت بذلك عندما تعطل الموقع؟ إذا كان الأمر كذلك - مرحباً بك في النادي. لكن الخبر السار هو أن 90% من هذه المشاكل تُحل من خلال سير عمل Git الصحيح لمطوري PHP.

\n\n

في هذه المقالة، لن نعيد سرد الوثائق. سنناقش سيناريوهات حقيقية: كيفية تنظيم الفروع، ومتى نستخدم rebase ومتى نستخدم merge، وكيفية إعداد العمليات بحيث لا يرتبك الفريق في الـ commits. هيا بنا!

\n\n

لماذا "git add . && git push" هو شر

\n\n

العديد من مطوري PHP، خاصة في البداية، يستخدمون Git كـ "فلاشة سحابية". يقومون بعمل commit لكل شيء بشكل عشوائي، ولا يكتبون رسائل ذات معنى، ويدفعون مباشرة إلى master. هذا يعمل تماماً حتى أول تعارض أو حتى اللحظة التي تحتاج فيها إلى التراجع عن تغيير.

\n\n

يجب أن يحل سير عمل git php الصحيح ثلاث مهام:

\n
    \n
  • عزل التغييرات - بحيث لا تكسر الميزة أو إصلاح الخلل الكود العامل.
  • \n
  • الشفافية - بحيث يفهم أي مطور ما يحدث في المشروع.
  • \n
  • الأتمتة - بحيث يتم تشغيل الاختبارات وأدوات التحليل قبل وصول الكود إلى بيئة الإنتاج.
  • \n
\n\n

دعنا نرى كيفية تحقيق ذلك عملياً.

\n\n

اختيار استراتيجية التفرع: Git Flow، GitHub Flow أم شيء خاص بك؟

\n\n

لمشاريع PHP، لا توجد إجابة واحدة صحيحة. كل شيء يعتمد على حجم الفريق وتكرار الإصدارات. لكن هناك نموذجان شائعان.

\n\n

Git Flow - الكلاسيكية للمشاريع الكبيرة

\n\n

إذا كنت تعمل على تطبيق متجانس بإصدارات واضحة (مثل إصدار مرة في الشهر)، فإن Git Flow هو خيارك. الفروع الرئيسية:

\n
    \n
  • master - فقط الكود المستقر المطابق لبيئة الإنتاج.
  • \n
  • develop - فرع التكامل لجميع الميزات.
  • \n
  • feature/* - كل ميزة جديدة.
  • \n
  • release/* - التحضير للإصدار.
  • \n
  • hotfix/* - الإصلاحات العاجلة.
  • \n
\n\n

مثال لمطور PHP: أنت تكتب وحدة دفع. تنشئ فرع feature/payment-module من develop. بعد الانتهاء - طلب سحب إلى develop. عندما تتراكم ميزات كافية - تنشئ release/2.3.0، حيث فقط إصلاحات الأخطاء. ثم تدمج في master و develop.

\n\n

GitHub Flow - للتكرارات السريعة

\n\n

إذا كان لديك خدمات مصغرة أو تنشر عدة مرات في اليوم، فإن GitHub Flow أبسط:

\n
    \n
  • main (أو master) - دائماً جاهز للنشر.
  • \n
  • أي فرع آخر - لميزة أو إصلاح خلل.
  • \n
  • بعد طلب السحب والمراجعة - يتم الدمج مباشرة في main.
  • \n
\n\n

بالنسبة لـ PHP، هذا مناسب بشكل خاص عندما يكون لديك CI/CD مهيأ: بعد الدمج في main، يتم تشغيل الاختبارات والنشر تلقائياً إلى staging أو production.

\n\n

كتابة commits ذات معنى: أمثلة بلغة PHP

\n\n

الـ commit ليس مجرد "حفظ". إنه وثيقة ستستخدمها أنت وزملاؤك لاستعادة التاريخ. استخدم conventional commits:

\n\n
feat: add payment processing via Stripe\nfix: correct SQL query in user repository\nrefactor: extract validation logic to trait\n
\n\n

والآن تخيل أنك تعمل على مشروع PHP باستخدام Laravel. لنفترض أنك أضفت أمر Artisan جديد. أي commit سيكون مفيداً؟

\n\n
feat: add artisan command to sync expired subscriptions\n\n- Created SyncExpiredSubscriptions command\n- Added subscription:sync tag to schedule\n- Updated Subscription model with scopeExpired\n
\n\n

بعد شهر، ستتمكن من العثور بسرعة على متى ولماذا تمت إضافة هذا الأمر.

المدونات

توصيات الكتب