لذت برنامه نویسی! نگهداری و مدیریت نسخه‌ها و آنچه گذشت!

اینم یه تجربه پراکنده دیگه!

من مدت‌های زیادی هست که برنامه نویسی می‌کنم و توی این مدت سعی کردم در مورد تکنیک‌های و شگردهایی که در دنیا برای برنامه‌نویسی استفاده میشه اطلاع کسب کنم. از اولین چیزهایی که باهاش آشنا شدم سیستم‌های کنترل و مدیریت نسخه یا همون Version Control System هست. حالا میخواستم یکم بیشتر در این مورد توضیح بدم چون دیدم که خیلی‌ها علاوه برا اینکه از این ابزارهای استفاده نمی‌کنن اعتقادی هم به استفاده ازش ندارن.

بصورت ساده این سیستم‌های به روش‌های مختلفی نسخه‌های مختلف فایل رو نگهداری می‌کنند یا «آنچه گذشت» رو مدیریت می‌کنند. این ابزار برای برنامه نویس‌ها و تقریبا هر کسی  که یه سری فایل رو بصورت مداوم بروز رسانی می‌کنه (مثلا متن یک قرار داد، یا یک مقاله علمی و …) مهمه. وقتی کار جدی می‌شه خیلی وقت‌ها به این نیاز میشه که بدونیم:

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

اما برای استفاده از این سیستم‌ها همیشه یه مقاومتی وجود داره که دلایل معمولش اینا هستن:

  • اولین و معمولا مهمترین دلیل مقاومت در مورد این سیستم‌ها اینه که افراد در قبال تغییر مقاومت میکنن و همیشه دوست دارن توی وضعیت فعلی بمونن. معمولا اجباره که باعث میشه آدم‌ها از وضعیت فعلیشون خارج بشن و یه چیز جدید یادبگیرن
  • دومین دلیل اینه که دلیل و اهمیت استفاده از این سیستم‌ها رو درک نکردن. یعنی نمیدونن که اگه از این سیستم‌ها استفاده کنن چه سودی نصیبشون میشه و درصورت عدم استفاده چه چیزی رو از دست میدن. من خودم به شخصه جز این دسته از آدمها بودم و الان بعد از مدت‌ها استفاده از این سیستم‌ها حتی سعی میکنم تاریخچه کارهای بی اهمیتم رو هم داشته باشم
  • سومین دلیل که به دلیل اول هم مربوط میشه اینه که «ترک عادت موجب مرض است» یعنی آدمها باید روندی رو که خیلی روزمره است و خیلی بهش عادت دارن عوض کنن.

اگه بخوام اسمی از این ابزارها بیارم لیستشون خیلی زیاده و دعوا هم سر اینکه کدوم بهتره زیادن. مثلا دوستانی که با ابزارهای مایکروسافت کار میکنن TFS رو با دنیا عوض نمی‌کنن. دوستانی که در محیط لینوکس برنامه نویسی میکنن و یکم هم قدیمی هستن از SVN تا خون در رگ دارن دفاع میکنن. و اونایی که «اوپن سور باز» هستن هم GIT رو میپرستن. اما دقت داشته باشید که از دید من مهم‌ترین قسمت اینه که یکی از این سیستم‌ها در محیط شما مورد استفاده قرار بگیره و اینکه اون ابزاری رو انتخاب کنید که اکثریت آدم‌ها نسبت بهش نظر خاصی ندارن و یا با اون سیستم به اصطلاح «راحتن».

اما لیست برنامه‌های کنترل نسخه اینا هستن:

  • Team Foundation Server: این برنامه توسط مایکروسافت تولید میشه که یک مجموعه کامل مدیریت پروژه نرم‌افزاریه که شامل برنامه کنترل نسخه هم هست. این نرم افزار جزء نرم‌افزارهای مدیریت نسخه متمرکزه.
  • GIT: این سیستم که توسط لینوس توروالدز نویسنده هسته لینوکس برای مدیریت کدهای هسته لینوکس مورد استفاده قرار گرفته. این سیستم جز سیستم‌های مدیریت نسخه غیر متمرکزه
  • CVS: تقریبا قدیمی ترین برنامه کنترل نسخه متمرکزیه که من میشناسم
  • SVN: یک سیستم مدیریت نسخه متمرکز است که طراحی شده تا با CVS همخوانی داشته باشه و اشکالات این سیستم رو رفع کنه
  • HG: هم تقریبا همزمان با GIT توسعه پیدا کرده و هدفش این بوده که سیستم مدیریت نسخه غیر متمرکز باشه.
  • Bazaar: سیستم کنترل نسخه غیر متمرکزه که توسط شرکت canonical پشتیبانی میشه

حالا اگه خواستید از سیستم‌های کنترل نسخه استفاده کنید قبل از اینکه بخواید روی اینکه از کدوم ابزار استفاده کنید باید روی این کار کنید که آدم‌های شما بخوان از این سیستم‌ها استفاده کنن.

همین

5 دیدگاه در “لذت برنامه نویسی! نگهداری و مدیریت نسخه‌ها و آنچه گذشت!

  1. علیرضا می‌گوید:

    سلام

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

    • ay می‌گوید:

      سلام

      راه حل‌ها واسه پیاده‌سازی زیادن. ولی همشون معمولا نیاز به یه سری دانش راه‌اندازی و مدیریت سرور دارن که خب معمولا این قسمت من رو به عنوان یه برنامه نویس اذیت کرده. من هیچوقت موفق نشدم که TFS رو به درستی نصب کنم. تنها کاری که از صفر خودم انجام دادم نصب و راه‌اندازی SVN بوده که اونم بخشی از وظایفم توی اون موقعیت شغلی بوده. من معمولا به دلیل تنبلی معمولا از vm های آماده ای که turnkeylinux.org واسه svn, git, bazaar داره و یا از gitlab استفاده میکنم. امیدوارم کمک کرده باشه.

  2. علیرضا می‌گوید:

    سلام

    از پاسخ خوبتون ممنونم. به نظر کمی نصب و را ه اندازش گیرایی داره ولی به نظرم نصب customize در بلند مدت بهتر جواب میده. بعد از بررسی git نظرمو جلب کرد. یکی از دوستان پیشنهاد نصب git روی openshift رو داده. نظر شما در این مورد چیه و مزیت اصلی این متد رو بفرمایید.

    • ay می‌گوید:

      حقیقتا در دراز مدت نصب از صفر پیشنهاد میشه. اما من خود اینطور عمل میکنم که اول بصورت آزمایشی از این سیستم‌ها استفاده می‌کنم و بعدش سعی میکنم در محیط عملیاتی یه کاری رو از صفر پیاده‌سازی کنم. در مورد git باید بگم که اگه میخواید از سیستم های آنلاین استفاده کنید می‌تونید از github و یا bitbucket استفاده کنید. openshift‌ هم از git پشتیبانی میکنه اما اصلتا هدفش نگهداری نسخه نیست بلکه یک سیستم Platform-as-a-Service هست که خب متفاوته. من قبلا یه پست در مورد openshift نوشتم که اگه دوست داشتید می‌تونید بخونیدش.

  3. علیرضا می‌گوید:

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

پاسخ دهید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *