سیستم کنترل نسخه و بعضی از اصطلاحهای آن. (در قالب داستان! )
سلام دوستان عزیز. توی این پست میخوایم در رابطه با سیستمهای «کنترل نسخه» صحبت کنیم. و بگیم که چی هست و به چه دردی میخوره.
یک کلام خطم کلام. «سیستم کنترل نسخه» وسیلهای است برای مدیریت تغییرهایی که روی کدها و یا نوشتهها و یا غیره انجام شده. و همچنین برای بازیابی راحتتر در آینده، کدنویسی توسط بیش از یکنفر، مشخص بودن تغییرها از روز اول، مشخص بودن شخص انجام دهندهی تغییرات، برای بازگشت به نسخههای قبل و ... استفاده میشه.
علاقهمند شدم، میشه با یه مثال عملی توضیح بدی؟. چشم. سیستم کنترل نسخه که انگلیسیزبانها بهش میگن (version-control system) یا به اختصار vcs ، (و همچین اسپرانتو دانها یهش میگن versitena sistemo) وسیلهای هست که ما از اون برای رسیدن به یعضی از مقاصد استفاده میکنیم! فرض کنید که سه نفر میخوان با کمک همدیگه نرمافزاری رو بنویسن (مریم، جمشید، پژمان). پس کدهای این نرمافزار (بدنهی درخت = trunk ) باید در جایی قرار داشته باشه که هر سه نفر بهش دسترسی داشته باشن مثلا روی شبکهی اینترنت. اون سه نفر بعد از فکرکردن در رابطه با نرمافزارهای آزاد، تصمیم میگیرن که کدهاشون رو روی اینترنت بذارن. حالا اونها انتخابهای زیادی دارن که روی چه وبگاههایی بذارن. بعد از دیدن وبگاههای متفاوت بین سه تا وبگاه مردد میمونن. وبگاههای لانچپد، گیتوریس و گیتهاب. میرن مطالعه بیشتر میکنن میبینن که وبگاه گیتهاب مورد تایید بنیاد نرمافزار آزاد نیست، پس همون اول بیخیالش میشن. لانچپد از سیستمکنترل نسخهی «گنو بازار» استفاده میکنه و گیتوریس از« گیت». بعد از مشورت با چند نفر به این نتیجه میرسن که هم گیتوریس خوب هست و هم لانچپد ولی چون نیاز به مباحث مدیریت پروژهای دارن از لانچپد استفاده کنن بهتره. بعد یه پروژه روی لانچپد میسازن و به خودشون (هر سهتاشون) دسترسی هم دیدن کدها و هم تغییر کدها میدن. (دسترسی خواندن نوشتن = read-write access). خب. جمشید کدهایی که از قبل نوشته بود رو میذاره روی لانچپد (commit میکنه.) و این کدها میشن نسخهی ۱ (revision 1) بعد از اون مریم میره کدهایی که جمشید روی لانچپد گذاشته (نسخهی ۱) رو میگیره (check out میکنه) و بعد تغییراتی روش اعمال میکنه و دوباره میفرسته روی لانچپد (commit میکنه) و این میشه نسخهی ۲ (revision 2). حالا جمشید میخواد ببینه که مریم چیکار کرده، پس میره کدها رو از لانچپد میگیره (check out میکنه) و بعد با کدهایی که از اول داشت قاطیش میکنه (merge میکنه) و بعد تغییراتش رو commit میکنه و این قضیه همینجور ادامه پیدا میکنه. و بعد از مدت زیادی پژمان سر و کلهاش پیدا میششه، کدها رو میگیره و تغییرات چرت و پرتی میده و میذاره روی لانچپد، بعد مریم checkout میکنه و بعدش لیست تغییرها (change list) رو نگاه میکنه و متوجه میشه که بله آقا تشریف آوردن! تصمیم میگیره که تغییراتی که پژمان داده رو به حالت قبل بازگردونه (revert کنه). اون کار رو انجام میده و با همفکری جمشید دیگه به پژمان فقط دسترسی دیدن کدها رو میدن (دسترسی فقط خواندن = read-only access) و از اون موقع به بعد هر موقع که پژمان بخواد کدها رو تغییر بده نمیتونه! و باید اول یک مخزن برای خودش بسازه و بعد یک کپی از کدهای رویلانچپد رو بذاره روی مخزن خودش (منشعب کنه یا شاخهبندی کنه = fork کنه یا branch کنه) و بعد تقاضا بده که کدهاش با کدهای مسیر اصلی (baseline) که کدهای پروژهی مریم و جمشید هست! قاطی بشه (merge request بده) و اگه اونها صلاح دیدن کدها رو وارد کنن (merge کنن).
نکته: چون میخواستم داستان خیلی پیجیده نشه بعضی از اصطلاحها رو وارد داستان نکردم.
معنی بعضی از اصطلاحها برام نا آشنا بود. بیشتر توضیحشون میدی؟ حتمن. اول این شکل رو که از ویکیپدیا گرفتم ببینید. خیلی از چیزها رو متوجه میشید.
منبع عکس: +
چه نرمافزارهای آزادی این کار رو میکنند؟
- گنو بازار (GNU Bazzar) (مورد استفاده برای توسعهی اوبونتو و دیگر متعلقات وابسته به شرکت کنونیکال! و بسیاری دیگر)
- گیت (Git) (مورد استفاده برای توسعهی هستهی لینوکس، سیستمعامل تریسکل و بسیاری دیگر از نرمافزارها)
- مرکیوریال (Mercurial)
- سیویاس (CVS)
- سابورژن (Subversion) (SVN)
- گنو آرک (GNU Arch) (گنو بازار یک فورک از گنو آرک است)
- ...
چه وبگاههایی هستند که هم آزاد باشند و هم از کنترل نسخههای آزاد استفاده کنند؟
- لانچپد (https://launchpad.net) (تنها میشه از گنو بازار روی آن استفاده کرد) (مورد استفاده برای توسعهی اوبونتو و دیگر متعلقات وابسته به شرکت کنونیکال! و بسیاری دیگر )
- گیتوریس (https://gitorious.org) (تنها میشه از گیت روی آن استفاده کرد)
- سورسفورج (http://sourceforge.net) (گیت، بازار، سیویاس، سابورژن و ... )
- ...
پست بعدی در رابطه با کنترل نسخه:
به ohloh.net اشاره نکردی؟ به لیست پروژه هایی که روش قرار دارند نگاه بندازی مخت سوت میکشه!