سير عمل Git لمطور PHP: دليل عملي لتجنب كوارث الإنتاج

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

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

ابدأ الدورة

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

\n\n

هل سبق لك أن دفعت (push) كودًا إلى master مساء الجمعة، وأنت تدعو الله أن يعمل كل شيء؟ أو وقعت في مشكلة composer.lock بعد دمج (merge) كسر كل شيء؟ مرحبًا بك في النادي. Git ليس مجرد نظام للتحكم في الإصدارات، بل هو أداتك اليومية. لكن بدون سير عمل صحيح، حتى أفضل كود PHP يتحول إلى قرع.

\n\n

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

\n\n

1. اختر استراتيجيتك: Git Flow أم Trunk-Based

\n\n

الجدل بين Git Flow و Trunk-Based Development أطول من تاريخ أطر عمل PHP. لكن بالنسبة لمعظم مشاريع PHP (خاصة القديمة على Symfony/Laravel)، يظل Git Flow المعيار الذهبي. لماذا؟

\n\n
    \n
  • عزل واضح للميزات والإصدارات والإصلاحات العاجلة.
  • \n
  • تحكم كامل فيما يتم نشره في الإنتاج.
  • \n
  • التعامل مع Composer — لا حاجة لدمج فرع التطوير (dev) في كل مرة.
  • \n
\n\n

لكن إذا كان لديك خدمات مصغرة و CI/CD متقدم، فإن Trunk-Based خيار جيد أيضًا. سنركز هنا على الطريقة الكلاسيكية.

\n\n

2. Feature Branch: ملعبك الخاص

\n\n

كل ميزة جديدة — فرع منفصل. يجب أن يكون الاسم واضحًا: feature/PROJ-123-add-payment-gateway. لا تستخدم أسماء مثل fix-bug أو new-stuff.

\n\n

مثال لبدء العمل:

\n\n
git checkout -b feature/PROJ-42-new-cache-system develop\ngit push origin feature/PROJ-42-new-cache-system
\n\n

أثناء كتابة الكود، لا تنسَ Composer. إذا أضفت تبعية جديدة، قم بإضافة (commit) ملفي composer.json و composer.lock معًا. هذا سينقذ زملاءك من سؤال "لماذا لا يعمل عندي؟"

\n\n
composer require predis/predis\ngit add composer.json composer.lock\ngit commit -m "PROJ-42: Add predis for caching"
\n\n

هام: لا تقم بإضافة مجلد vendor/! أضفه إلى ملف .gitignore فورًا.

\n\n

3. Pull Request: مراجعة كود بدون ألم

\n\n

عندما تكتمل الميزة، أنشئ PR (أو MR في GitLab) إلى فرع develop. إليك قائمة تحقق ستنقذ أعصاب المراجع:

\n\n
    \n
  • ✅ الكود يجتاز phpcs و phpstan (مستوى 6 على الأقل).
  • \n
  • ✅ تمت كتابة الاختبارات (PHPUnit, Pest).
  • \n
  • ✅ تم تحديث composer.lock.
  • \n
  • ✅ لا توجد تعارضات مع فرع develop.
\n\n

مثال لسكريبت CI (GitHub Actions):

\n\n
name: PHP CI\n\non:\n  pull_request:\n    branches: [ develop ]\n\njobs:\n  php-tests:\n    runs-on: ubuntu-latest\n    steps:\n      - uses: actions/checkout@v3\n      - name: Install dependencies\n        run: composer install --no-interaction --prefer-dist\n      - name: Run PHPStan\n        run: vendor/bin/phpstan analyse src --level=6\n      - name: Run tests\n        run: vendor/bin/phpunit
\n\n

سير العمل هذا لمطوري PHP يؤتمتة فحص الكود حتى قبل أن ينظر أحد إلى PR. سحر، أليس كذلك؟

\n\n

4. فرع الإصدار: التحضير للإنتاج

\n\n

عندما تتراكم ميزات كافية للإصدار، أنشئ فرع release/x.y.z من develop. هنا تقوم بإصلاح الأخطاء، تحديث سجل التغييرات (changelog)، وزيادة رقم الإصدار في ملف composer.json.

\n\n
git checkout -b release/1.2.0 develop\n# إصلاح الأخطاء وتحديث الإصدار\nvim composer.json  # تغيير "version": "1.2.0"\ngit commit -am "Bump version to 1.2.0"\n# الدمج في master و develop\ngit checkout master\ngit merge --no-ff release/1.2.0\ngit tag -a v1.2.0 -m "Release version 1.2.0"\ngit push origin master --tags
\n\n

لاحظ استخدام --no-ff. هذا يحافظ على تاريخ الفروع، لتتمكن دائمًا من معرفة مصدر الكود.

المدونات

توصيات الكتب