انشعاب (کنترل نسخه)

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

## <big>تنه</big>
شاخه‌های فرعی شاخه‌هایی هستند که والد دارند؛ شاخه‌ای بدون والد به عنوان تنها شاخه یا خط اصلی شناخته می‌شود. خط اصلی گاهی به طور فریبنده‌ای به عنوان HEAD نیز اشاره می‌شود، اما به طور صحیح head به یک شاخه نه به عنوان یک شاخه؛ بلکه به عنوان جدیدترین commit در یک شاخه داده شده اشاره دارد، و هر خط اصلی و هر شاخه‌ی نام‌دار دارای head خود است. خط اصلی معمولا به عنوان پایه‌ای برای یک پروژه بر روی که توسعه پیدا می‌کند، منظور می‌شود. اگر توسعه‌دهندگان به طور انحصاری بر روی خط اصلی کار می‌کنند، همواره شامل بهترین فناوری روز پیشرو پروژه است، اما بنابراین ممکن است نیز نسخه‌ای پایدارتر باشد. یک رویکرد دیگر این است که یک شاخه را از خط اصلی جدا کرده، تغییرات را در آن شاخه پیاده‌سازی کرده و زمانی که شاخه به پایداری و کارایی ثابت شده است، تغییرات را به خط اصلی ادغام کرد. بسته به حالت توسعه و سیاست commit، خط اصلی ممکن است شامل پایدارترین یا ناپایدارترین یا چیزی میان این دو نسخه باشد. اصطلاحات دیگر برای خط اصلی شامل مبنا، خط اصلی و مستر است، اگرچه در برخی موارد این اصطلاحات با معانی مشابه اما متمایز استفاده می‌شوند - به کنترل نسخه اصطلاحات مشترک مراجعه شود. اغلب کار توسعه‌دهندگان اصلی در خط اصلی انجام می‌شود و نسخه‌های پایدار موازی می‌شوند، و به‌صورت مکرر اصلاحات گاهی از شاخه‌ها به خط اصلی ادغام می‌شوند. وقتی توسعه نسخه‌های آینده در شاخه‌های غیر خط اصلی انجام می‌شود، معمولاً برای پروژه‌هایی انجام می‌شود که بطور متداول تغییر نمی‌کنند، یا جایی که انتظار می‌رود تا تا زمان زیادی تا پیاده‌سازی آن آماده برای ادغام در خط اصلی شود.

## <big>ادغام</big>
مقاله اصلی: ادغام (کنترل نسخه)

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

## <big>انگیزه های انشعاب</big>
شاخه‌ها امکان توسعه قسمت‌های مختلف نرم‌افزار به صورت موازی را فراهم می‌کنند. پروژه‌های بزرگ نیازمند انجام نقش‌های مختلف مانند توسعه‌دهندگان، مدیران ساخت و تضمین کیفیت نرم‌افزار هستند. علاوه بر این، ممکن است نیاز به حفظ چندین نسخه بر روی پلتفرم‌های عاملی مختلف باشد. شاخه‌ها به همکاران اجازه می‌دهند تا تغییرات را بدون ناپایدار کردن پایگاه کد جدا کنند، به عنوان مثال، اصلاحات برای باگ‌ها، ویژگی‌های جدید و یا ادغام نسخه‌ها. این تغییرات ممکن است پس از آزمون، بعداً ادغام شوند (همگام‌سازی مجدد).

## <big>شاخه توسعه</big>
یک شاخه توسعه یا درخت توسعه یک نسخه از یک قطعه نرم‌افزار است که در حال توسعه است و هنوز به صورت رسمی منتشر نشده است. در جامعه منبع باز، مفهوم انتشار معمولاً استعاری است، زیرا عموماً هر کسی می‌تواند هر نسخه مورد نظر را چک‌اوت کند، آیا این در شاخه توسعه باشد یا نه. اغلب، نسخه‌ای که در نهایت به عنوان نسخه اصلی بعدی شناخته خواهد شد، شاخه توسعه نامیده می‌شود. با این حال، بسیاری از مواقع زمانی بیشتر از یک نسخه بعدی از نرم‌افزار در حال توسعه در زمان داده شده وجود دارد. اغلب، شاخه توسعه خود خط اصلی است. برخی از سیستم‌های کنترل نسخه، اصطلاحات خاصی برای شاخه اصلی توسعه دارند. به عنوان مثال، در سیستم نسخه‌های هم‌روند، آن را "MAIN" می‌نامند. گیت به طور پیش‌فرض از "master" استفاده می‌کند، اگرچه گیت‌هاب و گیت‌لب پس از قتل جورج فلوید به "main" تغییر کردند.

## <big>شاخه های سایه یا جادو</big>
در CVSNT، یک شاخه سایه یا شاخه جادویی "تغییرات" را که در شاخه بالادست ایجاد شده است، پوشش می‌دهد تا نگهداری از تغییرات کوچک راحت‌تر شود (cvc یک سیستم ساخت بسته‌های منبع باز است که یک سیستم کنترل نسخه برای بسته‌های تولید شده توسط rPath را شامل می‌شود.)

## <big>کنترل بازبینی توزیع شده</big>
کلون‌های مخزن در کنترل نسخه توزیع شده، ممکن است کلیه مخزن همراه با شاخه‌ها کپی شده و بر روی آن کار شود. نرم‌افزار‌های Monotone (mtn)، Mercurial (hg) و git این عمل را "کلون" می‌نامند در حالی که Bazaar این عمل را "شاخه" می‌نامد.[citation needed] در برخی از سیستم‌های کنترل نسخه توزیع شده مانند Darcs، تفاوتی بین مخازن و شاخه‌ها وجود ندارد. در این سیستم‌ها، گرفتن یک کپی از یک مخزن معادل با گرفتن یک شاخه است.
رده:کنترل نسخه