Git ليس سحرًا، بل أداة. لكن يجب أن تعرف كيف تستخدمها
إذا كنت تكتب بلغة JavaScript، فمن المحتمل أنك واجهت موقفًا حيث بعد git merge يتحول كل شيء في الكونسول إلى اللون الأحمر، وتصل رسائل في Slack: "من الذي عطل البناء؟". مألوف؟ مرحبًا بك في عالم حيث سير عمل Git ليس مجرد مجموعة أوامر، بل هو الأساس الذي تقوم عليه عملية التطوير بأكملها.
في هذه المقالة، سنناقش ليس نظرية مجردة، بل سير عمل حقيقي لفريق من مطوري JavaScript. ستتعلم كيفية تنظيم الفروع، وإعداد مراجعة الكود، وعدم الخوف من rebase، وأتمتة المهام الروتينية. هيا بنا.
لماذا لا يعمل "git add — git commit — git push" القياسي في الفريق؟
عندما يعمل شخص واحد على المشروع، فإن الفوضى في الفروع هي شأن شخصي. ولكن بمجرد أن ينضم إلى المستودع مطور ثانٍ وثالث وعاشر، يبدأ الجحيم بدون سير عمل Git واضح. الصراعات، والالتزامات المفقودة، والرسائل غير المفهومة مثل "fix" أو "upd" - كل هذا يقتل الإنتاجية.
بالنسبة لمشاريع JavaScript (React، Node.js، Next.js)، تتفاقم المشكلة لأن التبعيات والبناءات والإعدادات تتغير غالبًا. دمج خاطئ واحد - وستقضي نصف يوم في معرفة لماذا توقف npm run build عن العمل.
لذلك، دعونا نضع معيارًا موحدًا. دعنا نسميه "سير عمل Git نظيف لفريق JS".
الأساس: نموذج التفرع (Branching Model)
سنستخدم Git Flow الكلاسيكي مع تعديلات طفيفة تناسب مجموعة تقنيات JavaScript الحديثة. لست بحاجة إلى 10 أنواع من الفروع. أربعة كافية:
main— فرع الإنتاج. يدخل هنا فقط الكود المستقر الذي اجتاز المراجعة والاختبارات.develop— فرع التطوير الرئيسي. يتم دمج جميع الميزات هنا.feature/*— فروع للميزات الجديدة. سمها بشكل ذي معنى:feature/add-auth-modal.fix/*— لإصلاحات الأخطاء. على سبيل المثال،fix/api-timeout-error.
هذه المجموعة كافية لـ 90٪ من المشاريع. تريد مستوى متقدم؟ أضف release/* للتحضير للإصدارات و hotfix/* للإصلاحات العاجلة في الإنتاج.
مثال: إنشاء feature branch
لنفترض أنك بحاجة إلى إضافة نموذج اتصال في React. لا تفعل ذلك في develop. أنشئ فرعًا منفصلاً:
git checkout developgit pull origin developgit checkout -b feature/contact-formالآن أنت تعمل بشكل منعزل. يمكنك التعطيل والتجربة وكتابة كود سيء - لن يزعج هذا أحدًا.
الالتزامات: اكتب بحيث لا يكون الأمر مخجلاً
رسائل الالتزامات هي توثيق للكود الخاص بك. إذا كتبت git commit -m "fix"، فإنك تجعل حياة زملائك وحياتك بعد شهر أكثر صعوبة. التزم بـ Conventional Commits. هذا معيار سهل القراءة ويتم تحليله تلقائيًا بواسطة الأدوات.
التنسيق:
<النوع>(<المجال>): <الوصف>
[نص الالتزام الاختياري]الأنواع لمشروع JavaScript:
feat— ميزة جديدةfix— إصلاح خطأrefactor— إعادة هيكلةdocs— توثيقchore— مهام روتينية (تحديث التبعيات، إعداد الـ linter)
مثال على التزام جيد:
feat(contact-form): add form validation with Yup
- Added Yup schema for name, email, message fields- Display inline errors on blur- Disable submit button when form is invalidمثل هذا الالتزام يخبرك فورًا: ماذا تم، وأين تم، ولماذا. مثالي لـ مراجعة الكود.
مراجعة الكود: لا تخف من النقد، بل خف من الأخطاء
مراجعة الكود ليست امتحانًا، بل هي طريقة لاكتشاف الخطأ قبل أن يصل إلى الإنتاج. في الكود الجيد