Git flow
نموذج التفرّع git-flow
هو خمس قواعد وكثير من مسك الدفاتر. القواعد سهلة؛ أما مسك الدفاتر فهو ما يخطئ
فيه الناس في السادسة مساءً من يوم إصدار — يدمجون إصلاحًا عاجلًا في main
وينسون develop، أو يضعون الوسم على الفرع الخطأ.
⌘K ← Git flow يتولى مسك الدفاتر عنك.

التخطيط
| الفرع | ما يحمله |
|---|---|
فرع الإطلاق (main) |
ما هو في الإنتاج. وكل إصدار يُوسَم هنا. |
فرع التكامل (develop) |
حيث يتراكم العمل المنجَز بين الإصدارات. |
feature/* |
وحدة عمل واحدة، متفرعة عن فرع التكامل. |
release/* |
نسخة يجري تثبيتها، متفرعة عن فرع التكامل. |
hotfix/* |
إصلاح عاجل، متفرع عن main — فالإنتاج لا ينتظر فرع التكامل. |
يقرأ Gitcito ويكتب مفاتيح الإعداد gitflow.* نفسها التي تستخدمها أداة سطر
الأوامر git flow (gitflow.branch.master، gitflow.prefix.feature، …).
فالمستودع الذي شغّل عليه أحدهم git flow init من قبل يُتعرَّف عليه فورًا،
والمستودع الذي يُعَدّ هنا يعمل مع أداة سطر الأوامر بعد ذلك. ويشغّل Gitcito أوامر
git عادية في كل خطوة — فلا حاجة إلى تثبيت الأداة أصلًا.
الإعداد يكتب تلك المفاتيح، وإن لم يكن فرع التكامل موجودًا بعد أنشأه انطلاقًا من فرع الإطلاق. ولا يمسّ شيئًا آخر. ويمكنك تغيير أي اسم أو بادئة لاحقًا من تعديل التخطيط.
البدء
اختر النوع، واكتب اسمًا، واضغط بدء. تعرض النافذة الفرع الذي توشك على إنشائه والفرع الذي سيُنشأ انطلاقًا منه قبل أن تلتزم بذلك:
feature/search from develop
hotfix/1.0.1 from main
الاسم هو ما تكتبه؛ أما البادئة فتأتي من التخطيط.
الإنهاء
الإنهاء هو الجزء الجدير بالأتمتة، لأنه عدة خطوات لا بد أن تقع كلها:
| النوع | ما يفعله Gitcito |
|---|---|
| ميزة | يدمج في فرع التكامل بـ --no-ff، ويحذف الفرع، ويتركك على فرع التكامل |
| إصدار | يدمج في main، ويضع عليه الوسم، ويدمج في فرع التكامل، ويحذف الفرع، ويتركك على فرع التكامل |
| إصلاح عاجل | يدمج في main، ويضع عليه الوسم، ويدمج في فرع التكامل، ويحذف الفرع، ويتركك على main |
--no-ff مقصود: التزام الدمج هو ما يجعل الفرع مرئيًا في
الرسم البياني بعد ذلك. فبدونه تختفي ميزة قصيرة في خط مستقيم،
ويفقد النموذج الشيء الذي وُجد من أجله.
الوسم هو <بادئة وسم النسخة><الاسم> — فـ release/1.1.0 يصير v1.1.0 مع
البادئة الافتراضية. أزل علامة ضع وسمًا على الإصدار لتخطي ذلك، واكتب رسالة
وسم إن أردت أكثر من الافتراضي.
ما يرفض فعله
- شجرة عمل متسخة توقفه. التزم أو أخفِ التغييرات أولًا؛ فالإنهاء يدمج فرعين ويحرك HEAD مرتين، وفعل ذلك حول عمل غير ملتزَم به هو الطريقة التي يفقده بها الناس.
- دمج متعارض يتراجع عن العملية كلها. فلو نجح الدمج في main وتعارض الدمج في فرع التكامل، لبقيت مع إصدار نصف منتهٍ. يعيد Gitcito كل فرع إلى موضعه السابق ويبلّغك بالتعارض. ادمج ذلك الفرع يدويًا، وحُلّ التعارض في محلّل التعارضات، ثم المسار لك تنهيه بيدك.
- لا يرسل أبدًا. الإنهاء محلي بالكامل. أرسل main وفرع التكامل والوسم الجديد حين تكون مستعدًا — انظر المزامنة.
التراجع
تراجع واحد يعيد كل شيء إلى مكانه: يعود الفرعان إلى التزاميهما السابقين، ويُحذف الوسم، ويُعاد إنشاء الفرع المنتهي عند طرفه القديم. وهذا هو السبب كله في أن الإنهاء آمن للتجريب.
متى لا تستخدمه
يناسب git flow البرمجيات ذات الإصدارات المرقَّمة وفرع إنتاج مدعوم. أما إن كنت
تنشر من main عدة مرات في اليوم، ففرعا الإصدار والإصلاح العاجل مراسم لن
تستعملها — الفروع المكدَّسة أو فروع قصيرة العمر عادية متفرعة عن
main تناسبك أكثر. ونصف النموذج الخاص بالميزات يظل يعمل جيدًا وحده.