شاخه ساختن

این مقاله پیش‌نویس است و محتوای آن کامل نیست.

زمان مطالعه: 4 دقیقه

شاخه یا فورک، یک اصطلاح در سامانه های مدیریت پروژه است و به معنی منشعب کردن یک پروژه و ایجاد نسخه ای متفاوت از آن است. از شاخه علاوه بر ایجاد نسخه های سفارشی از یک پروژه، برای مشارکت در آن و ارائه تغییرات نیز استفاده می شود.

بدون شاخه، نمی توان لفظ عمومی را به یک داده اطلاق کرد. یک داده عمومی به همراه شاخه های آن است که باعث می شود جامعه مالک آن داده باشند و شاخه اصلی (یا یک شاخه به تنهایی) را نمی توان به عنوان داده عمومی دید زیرا تنها افرادی خاص می توانند وضعیت شاخه را تعیین کنند.

مثال: سیستم عامل اندروید

دو گزاره زیر را ببینید:

  • سیستم عامل اندروید یک داده عمومی است.
  • برای استفاده از اندروید مجبورید حساب گوگل داشته باشید و از خدمات انحصاری آن استفاده کنید.

دو گزاره قبل چگونه با هم ممکن است؟

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

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

اما شاخه هایی از اندروید نیز وجود دارند که بخش های انحصاری گوگل را حذف کرده اند. برای مثال لینیج او اس یکی از این انشعاب هاست. این موضوع اهمیت شاخه و توانایی ایجاد تغییرات توسط عموم را نشان می دهد.

مثال های دیگر

دیگر محصولات عمومی گوگل نیز مشابه هستند. برای مثال مرورگر گوگل یعنی کروم نیز بر پایه داده های عمومی پروژه کرومیوم ساخته شده است که مثل اندروید، شاخه ای که گوگل از آن نگه داری می کند حاوی قابلیت های مخرب و به ضرر کاربر است و شما باید به جای استفاده از شاخه گوگل، از شاخه های دیگر مثل بریو یا کرومیوم گوگل زدایی شده استفاده کنید.

اما این مساله مختص گوگل یا حتی کمپانی های بزرگ نیست. مثلا کنونیکال، توسعه دهنده اوبونتو در نسخه ۱۴.۰۴ از این سیستم عامل، جستجوهای کاربران را به سرور های آمازون ارسال می کرد (در کنار جستجوهای کاربران، کالا های آمازون نیز نمایش داده می شدند) که در حالی که این قابلیت مخرب قابل غیرفعال سازی بود، باعث شد تا بسیاری از اوبونتو به یکی از شاخه های آن مهاجرت کنند. این قابلیت در نسخه های بعدی اوبونتو به کلی حذف شد.

آیا شاخه ها فقط برای حذف قابلیت های مخربند؟

خیر. ممکن است شما بخواهید اقدامی کنید که از نظر همه مفید نیست و صاحب شاخه نمی پذیرد که آن را در شاخه خودش اضافه کند. مثلا شما رنگ آبی را به جای قرمز می پسندید یا می خواهید به یک برنامه یک قابلیت اضافه کنید که سرعت را کند می کند و صاحب شاخه فکر می کند که نبود این قابلیت بهتر است. در این صورت می توانید شاخه خودتان را ایجاد کنید و قابلیت هایی که می خواهید را در آن اضافه یا حذف کنید.

شاخه ها و دوباره کاری

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

شاخه های مختلف یک پروژه می توانند تعداد افراد مصرف کننده پروژه را افزایش دهند. چون شاخه ها تا حدی می توانند از یک دیگر استفاده کنند (شاخه های کوچکتر بهبود های آپ استریم را دریافت می کنند و مشارکت های خودشان را به آپ استریم اضافه می کنند.) ترکیب این موضوع باعث می شود تا شاخه های یک پروژه برخلاف انتظارمان روی شاخه اصلی نیز تاثیر مثبت بگذارد.

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