الطريقة المثالية للإستخدام Git في مشروعك (Git Flow)


مرحبا بكم في موضوع جديد لـ Git ،هذا الموضوع راح يكون جداً مفيد لجميع المطورين في مشاريعهم الحالية والمستقبلية ،وسواء كانوا يعملوا بشكل منفرد او مع فريق.


أنصح قبل قراءة هذا الموضوع بقراءة موضوعي السابق 

كيف تتجاهل الملفات في مشروعك البرمجي عند استخدامك Git ؟


على أي حال جميع المطورين يعتمدوا على Git في مشاريعهم البرمجية ، ولكن كل مطور او فريق من المطورين يعتمدوا على نهج مختلف عن الاخر حتى عام 2010 عندما كتب مطور رهيب اسمه Vincent Driessen عن تجربته في مشاريعه الخاصة وايضا في مشاريع عمله ومن تجربته لمدة سنة لاحظ بأنها طريقة جداً ناجحه ، فيما بعد سميت بـ Git Flow 

ماهي طريقة Git Flow ؟ 

بداية لتوضيح الأمور الـ Git Flow عباره عن Branching Model بمعنى انها عباره عن استراتجية او طريقة ،تساعدك عند اتباعها على تجنب الكثير من المشاكل التي قد تواجها في مشروعك وتعاملك مع Git.


فكرتها هي :

البداية

سوف تملك في المشروع 2 من الـ Branch واحد يدعى master والاخر develop . والذين يعتبروا اساس طريقة الـ Git Flow


بداية مشروعك راح تعمل Branch جديد من الـ master تسميه develop ومن الان كل شغلك راح يكون على develop ! ، الـ master عباره عن نسخة الـ Production للمشروع ، بمعنى فقط يحتوي على النسخه المستقرة من المشروع وبما يعني ايضا بانه لن تعمل Merge للـ master الا في حالات معينه فقط !

Features branches 

في كل مره تريد اضافة ميزة جديدة او حتى تصلح Bugs يحتاج له وقت لحله راح تسوي Branch جديد لكل ميزة (feature) ، وضروري تنتبه بأنه يؤخد من الـ develop وليس من الـ master !


ما الفكرة هنا ؟

كل ميزة راح يكون لها Branch مستقل ، وبالتالي جميع الفريق سوف يركز على تطوير المميزات بشكل مستقل وايضا يستطيع مطورين او أكثر التعاون فيما بينهم لتطوير الميزة ، فالفائده هنا عمل الفريق كامل بشكل متزامن وايضا متعاون فيما بينهم .

لاحظ في هذه الصورة عندنا ميزتين ، الميزة الاولى انتهى تطويرها واختبارها بعد الانتهاء منها تم دمجها (merge) مع الـ develop وايضا سيتم حذف الـ Branch لانه لن يكون له فائده بعد الـ merge ، ومن ثم فعلنا نفس الامر مع الميزة الاخرى عندما انتيهنا منها تم دمجها مع الـ develop 

Release branches

بعد اضافة عدة مميزات سوف تقرر بأنه حان الوقت لاطلاق نسخة جديدة لمشروعك سواء لمتجر التطبيقات اذا كان تطبيق او ترفعه على السيرفر اذا كان موقع، هنا راح تسوي Branch جديد اسمه release-رقم النسخة 


ما الفائده من هذا الـ Branch ؟ في هذا الـ Branch النسخه تكون جاهزة للاطلاق ، فهنا يتم اختبارها سوا من قبل المستخدمين كمثال اطلاق نسخة للتطبيق في Testflight او من الفريق الـQA بعد عمل هذا الـ Branch تتوقف اضافة مميزات جديدة لهذه النسخه وفقط يتم حل الـ Bugs المكتشف اثناء تجربة المشروع من قبل الـ Testers.


لكن يمكن الاستمرار في تطوير مميزات جديدة للنسخه التالية من خلال feature branch ، فهذا المغزى من الـ Git Flow المشروع يستمر في التطوير بشكل متزامن

الان وصلت لمرحلة مستقرة للنسخة وحان وقت اطلاقها للمتجر او الموقع ، الذي سوف تقوم به هو دمجها اولاً مع الـ master وايضا اعطائها Tag برقم النسخه
ومن ثم دمجها مع الـ develop واخيرا يتم حذف Branch الـ release لعدم الحاجة له.


تذكر في بداية الموضوع ذكرت بأنه هناك حالات معينه فقط سوف تدمج الـBranch مع الـ master وايضا ذكرت بأن الـ master هو الذي يحتوي على نسخ الـ Production وهنا ذكرت بأنه يجب اضافة Tag برقم النسخة ، الـ Tag راح يفيدك مستقبلاً ، مثلا اطلقت نسخه واكتشفت وجود مشكلة كبيرة اضطريت تسحب النسخه ، فهنا تستطيع العودة للنسخه المستقرة اعتمادا على الـ Tag، ايضا في حال اكتشفت وجود bug يحتاج الى إصلاح بشكل عاجل ايضا راح يفدك الـ Tag

Hotfix branches

افترض اطلقت نسخه للتطبيق او الموقع وبعد اطلاقه اكتشفت انه في Bug

وهذا الـ Bug يتوجب عليك اصلاحه بشكل عاجل ولا يتحمل التأخير الى النسخة الاخرى ، وفي نفس الوقت المطورين مستمرين في تطوير مميزات جديدة لاطلاقها في النسخه الاخرى وتم دمج بعضها في الـ develop بما يعني Branch الـdevelop ماهو مستقر فهنا الحالة الوحيدة التي سوف تعمل Branch جديد للـ hotfix من الـ master !

وايضا مثل الـ release سوف يحتوي على Tag برقم النسخة ومن ثم تقوم بحل الـBug وعند الانتهاء منه تقوم بدمج الـ hotfix مع الـ master وايضا الـdevelop اخيراً يتم حذف Branch الـ hotfix لعدم الحاجة له


Join