Chapters ▾ 2nd Edition

3.4 انشعاب‌گیری در گیت (Git Branching) - روندهای کاری شاخه‌ها (Branching Workflows)

روندهای کاری شاخه‌ها (Branching Workflows)

حالا که اصول پایه‌ای شاخه‌زنی و ادغام را یاد گرفته‌اید، چه کارهایی می‌توانید یا باید با آن‌ها انجام دهید؟ در این بخش، به برخی جریان‌های کاری رایجی که این شاخه‌زنی سبک‌وزن امکان‌پذیر می‌کند، می‌پردازیم تا بتوانید تصمیم بگیرید آیا مایلید آن‌ها را در چرخه توسعه خود به کار ببرید یا خیر.

شاخه‌های بلندمدت (Long-Running Branches)

از آنجا که گیت از ادغام سه‌طرفه ساده استفاده می‌کند، ادغام مکرر از یک شاخه به شاخه‌ای دیگر در طول زمان معمولاً کار آسانی است. این بدین معناست که می‌توانید چندین شاخه همیشه باز داشته باشید که برای مراحل مختلف چرخه توسعه خود از آن‌ها استفاده می‌کنید؛ می‌توانید به‌طور مرتب از برخی شاخه‌ها به شاخه‌های دیگر ادغام انجام دهید.

بسیاری از توسعه‌دهندگان گیت دارای جریانی کاری هستند که این رویکرد را در بر می‌گیرد، مثلاً شاخه master آن‌ها فقط شامل کدی است که کاملاً پایدار است — احتمالاً تنها کدی که منتشر شده یا قرار است منتشر شود. آن‌ها شاخه موازی دیگری به نام develop یا next دارند که از آنجا کار می‌کنند یا برای تست پایداری استفاده می‌کنند — لزوماً همیشه پایدار نیست، اما هرگاه به وضعیت پایداری برسد، می‌توان آن را به master ادغام کرد. این شاخه برای جذب شاخه‌های موضوعی (شاخه‌های کوتاه‌مدت، مانند شاخه iss53 شما در گذشته) وقتی آماده هستند، استفاده می‌شود تا اطمینان حاصل شود که همه تست‌ها را پاس می‌کنند و خطا وارد نمی‌کنند.

در واقع، ما درباره اشاره‌گرهایی صحبت می‌کنیم که در خط کامیت‌هایی که ایجاد می‌کنید، به جلو حرکت می‌کنند. شاخه‌های پایدار در تاریخچه کامیت‌های شما عقب‌تر هستند و شاخه‌های پیشرفته‌تر در بالاتر تاریخچه قرار دارند.

A linear view of progressive-stability branching
نمودار 26. A linear view of progressive-stability branching

به‌طور کلی، راحت‌تر است که آن‌ها را به عنوان انبارهای کاری در نظر بگیرید، جایی که مجموعه‌ای از کامیت‌ها وقتی کاملاً تست می‌شوند، به انبار پایدارتر منتقل می‌شوند.

A “silo” view of progressive-stability branching
نمودار 27. A “silo” view of progressive-stability branching

می‌توانید این روند را برای چندین سطح پایداری ادامه دهید. برخی پروژه‌های بزرگ‌تر همچنین شاخه‌ای به نام proposed یا pu (به‌روزرسانی‌های پیشنهادی) دارند که شاخه‌های ادغام شده‌ای در آن قرار دارد که ممکن است برای وارد شدن به شاخه‌های next یا master هنوز آماده نباشند. ایده این است که شاخه‌های شما در سطوح مختلفی از پایداری قرار دارند؛ هنگامی که به سطح پایداری بالاتری رسیدند، به شاخه بالاتر خود ادغام می‌شوند. دوباره، داشتن چند شاخه بلندمدت ضروری نیست، اما اغلب مفید است، به‌ویژه وقتی با پروژه‌های بسیار بزرگ یا پیچیده سر و کار دارید.

شاخه‌های موضوعی (Topic Branches)

با این حال، شاخه‌های موضوعی در پروژه‌هایی با هر اندازه‌ای مفید هستند. شاخه موضوعی یک شاخه کوتاه‌مدت است که شما برای یک ویژگی خاص یا کار مرتبط ایجاد و استفاده می‌کنید. این کاری است که احتمالاً قبلاً با یک سیستم کنترل نسخه انجام نداده‌اید، زیرا معمولاً ایجاد و ادغام شاخه‌ها هزینه‌بر است. اما در گیت، ایجاد، کار روی، ادغام و حذف شاخه‌ها چندین بار در روز امری معمول است.

شما این موضوع را در بخش قبلی با شاخه‌های iss53 و hotfix که ایجاد کردید دیدید. چند کامیت روی آن‌ها انجام دادید و بلافاصله پس از ادغام آن‌ها در شاخه اصلی، آن‌ها را حذف کردید. این تکنیک به شما امکان می‌دهد سریع و کامل بین زمینه‌ها جابجا شوید — چون کار شما به بخش‌های جداگانه‌ای تقسیم شده که همه تغییرات آن شاخه مربوط به همان موضوع است، دیدن آنچه در بازبینی کد اتفاق افتاده آسان‌تر است. شما می‌توانید تغییرات را برای چند دقیقه، روز یا ماه نگه دارید و وقتی آماده شدند، آن‌ها را ادغام کنید، بدون توجه به ترتیب ایجاد یا کار روی آن‌ها.

برای مثال، فرض کنید روی شاخه master کار می‌کنید، سپس برای یک مسئله شاخه‌ای به نام iss91 ایجاد می‌کنید، کمی روی آن کار می‌کنید، سپس شاخه دوم iss91v2 را برای امتحان راه دیگری در همان مسئله ایجاد می‌کنید، به شاخه master بازمی‌گردید و مدتی روی آن کار می‌کنید، سپس شاخه‌ای به نام dumbidea ایجاد می‌کنید برای کاری که مطمئن نیستید ایده خوبی باشد. تاریخچه کامیت‌های شما چیزی شبیه به این خواهد بود:

Multiple topic branches
نمودار 28. Multiple topic branches

حالا فرض کنید تصمیم می‌گیرید راه‌حل دوم برای مسئله (شاخه iss91v2) را بیشتر می‌پسندید؛ و شاخه dumbidea را به همکارانتان نشان می‌دهید و معلوم می‌شود ایده‌ای نابغه‌وار است. می‌توانید شاخه اصلی iss91 را کنار بگذارید (و کامیت‌های C5 و C6 را از دست بدهید) و دو شاخه دیگر را ادغام کنید. تاریخچه شما در آن صورت چنین خواهد بود:

History after merging `dumbidea` and `iss91v2`
نمودار 29. History after merging dumbidea and iss91v2

ما در بخش گیت توزیع‌شده (Distributed git) به جزئیات بیشتری درباره جریان‌های کاری مختلف پروژه گیت شما خواهیم پرداخت، پس قبل از اینکه تصمیم بگیرید کدام طرح شاخه‌بندی را برای پروژه بعدی خود استفاده کنید، حتماً آن فصل را مطالعه نمایید.

مهم است که هنگام انجام همه این کارها به خاطر داشته باشید که این شاخه‌ها کاملاً محلی هستند. وقتی شاخه می‌زنید و ادغام می‌کنید، همه کارها فقط در مخزن گیت شما انجام می‌شود — هیچ ارتباطی با سرور برقرار نمی‌شود.

scroll-to-top