کنترل نسخه چیست؟
کنترل نسخه یا کنترل منبع (Revision control) عبارت است از سیستمی برای کنترل و پیگیری تغییرات واحد اطلاعاتی دخیل در ایجاد یک برنامه نرمافزاری. واحد اطلاعاتی مزبور میتواند شامل فایلهای سورس، راهنماها، میک فایلها، اشیاء نرمافزاری و ... سورس کنترل به خصوص در جایی اهمیت پیدا میکند که چند برنامهنویس بخواهند روی منابع مشترکی کار کنند. در این صورت است که مفاهیمی همانند مقایسه، ترکیب، تداخل و ... پیش میآیند که سورس کنترل باید بتواند راه حل مناسبی برای هر یک ارائه دهد. امروزه معمولاً از ابزارهای نرمافزاری برای این کار استفاده میشود. با این حال هنوز هم هستند شرکتهایی که از روشهای قدیمی مانند داشتن یک فایل متن در هر پوشه، هارد کپی و ... استفاده مینمایند. نرمافزارهای مدیریت کد به ۲ دسته توزیعی و متمرکز تقسیم میشوند. نرمافزارهای مدیریت متمرکز نظیر Subversion (svn) / CVS یک سرور و تعدادی کلاینت دارند. به این صورت که تمامی تغییرات در سرور ذخیره میشود و برنامهنویسها با استفاده از کلاینت تغییرات جدید را اعمال/دریافت میکنند. توزیعی نظیر GIT / Bazaar فاقد سرور هستند و سامانه تحت مدیریت هر برنامهنویسی میتواند یک سرور باشد که تاریخچه کامل را دارد. در این دسته تغییرات میتواند بدون در اختیار داشتن ارتباط انجام شود. در فرآیند توسعه نرمافزار، بازبینی نسخه توزیعی (Distributed version control) که به عنوان کنترل و بازبینی توزیعی نیز شناخته میشود شکلی از کنترل است که در آن همه اطلاعات روند توسعه از جمله تاریخچه کامل آن بر روی کامپیوتری توسعهدهندهای منعکس میشود. نرمافزار بازبینی نسخه توزیعشده، اجازه میدهد که بازبینی نسخه و ادغام، به صورت خودکار مدیریت شود، توسعه نرمافزار با سرعت بیشتری انجام گیرند، امکان توسعه نرمافزارها به صورت برونخط را بهبود میبخشد، و بر برای پشتیبانگیری یه یک مکان واحد تکیه نمیکند. برخلاف سیستمهای متمرکز، سیستمهای کنترل بازبینی توزیعشده (DVCS) یک رویکرد همتا به همتا را برای کنترل نسخه اتخاذ میکنند.
آپاچی سابورژن
آپاچی سابورژن (Apache Subversion) که بیشتر با اختصار svn شناخته میشود یک نرمافزار نسخهبندی و سورس کنترل است که به صورت یک نرمافزار آزاد عرضه میشود. توسعه این نرمافزار در سال ۲۰۰۰ توسط شرکت کلابنت آغاز شد. توسعهدهندگان از سابورژن برای مدیریت و نگهداری نسخههای جاری و تاریخی کدهای منبع، صفحات وب، مستندات و … استفاده میکنند. جامعه نرمافزارهای آزاد و بازمتن به صورت گستردهای از سابورژن استفاده میکند. پروژههایی مانند بنیاد نرمافزار آپاچی، پروژه فریبیاسدی، جیسیسی، مونو و سورسفورج. گوگل کد هم برای پروژههای اپن سورس خود میزبانی سابورژن را فراهم کردهاست. همچنین شرکتهای تجاری هم شروع به استفاده از سابورژن کردهاند. از ویژگیهای مطرح این ابزار میتوان به وجود کامیتها (commit) که شکل اتمی هستند و همگی آنها به صورت کامل اعمال میشوند یا هیچکدام اعمال نمیشوند، فایلهای حذف شده/تغییر نام یافته/ کپی شده/انتقال داده شده در تاریخچه حفظ میشوند، سیستم برای دایرکتوریها، متادیتاها، تغییرنام فایلها، لینکهای نرم و … را هم نسخه بندی میکند، پشتیبانی بومی از فایلهای باینری و شاخهبندی کد منبع یک عملیات ساده و ارزان است.
بیتکیپر
بیتکیپر (BitKeeper) ابزاری برای بازبینی نسخه توزیعشده نرمافزار منبع است. در ابتدا به صورت نرمافزار مالکیتی ارائه شد و سپس به صورت نرمافزار متن باز تحت مجوز Apache ۲٫۰ منتشر شد. بیتکیپر توسط شرکت خصوصی بیتموور (BitMover) در لوس گاتوس، کالیفرنیا به مدیریت لری مکوی تولید شد. در اوایل شکلگیری پروژه لینوکس، مدیریت توسعه هسته لینوکس توسط بیتکیپر انجام میشد. پس از مدتی بسیاری از توسعهدهندگان لینوکس، در استفاده از بیتکیپر امتناع ورزیدند. نگهدارنده کپی رایت، لری مکوی، حق استفاده رایگان از این نرمافزار را پس از آن که اندرو تریدگل به روش مهندسی معکوس میخواست که پروتکلهای بیت کیپر را پیاده کند، برداشت. توروالدز نیاز به سیستم توزیع شدهای داشت که بتواند از آن همانند بیتکیپر استفاده کند، ولی هیچکدام از نرمافزارهای آزاد را مبتنی بر نیازهای خود ندید در نتیجهٔ نرمافزار GIT را تولید کرد.
سیستم نسخههای همروند
سیستم نسخههای همروند (Concurrent Versions System) یا به اختصار cvs، یک نرمافزار کنترل نسخه در زمینه توسعه نرمافزار است. سیویاس از یک معماری مشتری-خدمتگذار برخوردار است و به صورت یک نرمافزار آزاد منتشر میشود. یک سیستم کنترل نسخه، تمامی تغییراتی که بر روی تعدادی فایل انجام میگیرد را نگهداری میکند و به چند توسعه دهنده (که ممکن است در مکانهای مختلفی حضور داشته باشند و در زمانهای مختلفی هم کار خود را انجام دهند) کمک میکند تا راحتتر با یکدیگر همکاری کنند. نگه داشتن تمامی تغییرات اعمال شده بر روی فایلها، کمک میکند تا توسعهدهندگان در هر زمان دلخواهی بتوانند نسخههای قدیمی و جدید را با هم مقایسه کنند و از پیشرفت و نحوه تغییرات آگاه شوند. سیویاس اولین بار در سال ۱۹۸۶ توسط دیک گرون به صورت تعدادی شل اسکریپت نوشته شد.
مرکوریال
مرکوریال (Mercurial) یک نرمافزار کنترل نسخه توزیعشده برای توسعهدهندگان نرمافزار است. این برنامه بر روی سیستمعاملهای مختلفی از جمله مایکروسافت ویندوز و انواع مختلف سیستمعاملهای شبه یونیکس نظیر لینوکس، فریبیاسدی، مک اواس ده و … اجرا میشود و یک نرمافزار چند سکویی به حساب میآید. مرکوریال تحت پروانه نرمافزاری جیپیال نسخه ۲ (یا بالاتر) منتشر میشود و یک نرمافزار آزاد به حساب میآید. مرکوریال بیشتر با استفاده از زبان برنامهنویسی پایتون پیادهسازی شده است. اما دربرگیرنده یک برنامه دیف برای مقایسه فایلهای باینری است که این برنامه دیف به زبان سی نوشته شده است. مرکوریال عمدتاً یک ابزار خط فرمانی است، اما واسطهای گرافیکی مختلفی هم به صورت افزونه برای آن موجود هستند. اهداف اصلی در طراحی مرکوریال عبارتند از کارایی و انعطافپذیری بالا، ساختار غیرمتمرکز، توسعه مشارکتی کاملاً توزیعشده، مدیریت کردن قدرتمند فایلهای متنی و فایلهای باینری، قابلیتهای پیشرفته در شاخهبندی و ادغامسازی، با حفظ کردن سادگی در مفهوم و … است. مرکوریال یک رابط تحت وب یکپارچه دارد. همچنین مرکوریال قدمهایی برای ساده کردن مهاجرت کاربران سابورژن برداشته است. خالق و رهبر توسعهدهندگان مرکوریال مت ماکال (Matt Mackall) است. ماکال اولین بار خبر انتشار مرکوریال را در ۱۹ آوریل ۲۰۰۵ اعلام کرد.
گیتلب
گیتلب (GitLab) یک سکو توسعه عملیات است که سرویس میزبانی گیت -بهرهمند از ویکی، پیگیری موضوع، یکپارچهسازی مداوم و استقرار پیوسته- را ارائه میکند. محصول گیتلب با مجوز متنباز شرکت گیتلب در دسترس عموم قرار دارد؛ بنابراین به دیگر افراد امکان خودمیزبانی میدهد. این نرم افزار در ۱۶ مهر ۱۳۹۰ (۸ اکتبر ۲۰۱۱ م.) با همکاری دیمیتری زاپروژتس و ولری سایزوف پایهگذاری شد. با الهام از گیتهاب و با اعتقاد به شعار «همه میتوانند مشارکت کنند» با زبان برنامه نویسی روبی بنیان نهاده شد. و اینک کماکان عمده منبع گیتلب در کنار زبان گو (GO) و چارچوب ویو جی اس (Vue.js) به روبی تکیه دارد.
گیت
گیت (Git) یک نرمافزار کنترل نسخه و از مدل نرمافزارهای آزاد و متنباز برای بازنگری کد منبع توزیع شده و مدیریت منبع کد است که برای دنبال کردن تغییر فایلهای کامپیوتری و دنبال کردن کارهای انجام شده روی آنها توسط افراد مختلف است. هدف اولیه این نرمافزار برای استفاده در پروژههای نرمافزاری بودهاست ولی میتوان از آن تنها برای دنبال کردن تغییر فایلها هم استفاده کرد. گیت ابتدا برای توسعه لینوکس توسط لینوس تروالدز به وجود آمد و اکنون پروژههای فراوانی از آن الهام گرفتهاند. هر دایرکتوری کاری در گیت یک مخزن کامل با تاریخچه کامل تغییرها و قابلیت بازنگری آنها است و برای کار با آن نیازی به دسترسی به شبکه یا سرور مرکزی وجود ندارد. گیت یک نرمافزار آزاد است که تحت عنوان جیپیال نسخه ۲ توزیع شدهاست. در طراحی گیت از نرمافزارهای Bitkeeper و Monotone الهام گرفته شدهاست. گیت در ابتدا به صورت یک نرم نرمافزار کنترل نسخه سطح پایین نوشته شد به این صورت که دیگران بتوانند برای آن نرمافزار لایه رویی بنویسند. با این که گیت وامدار bitkeeper است، اما تلاش شده که روشهای استفاده شده منحصر به فرد باشند.
تجربه سازنده گیت در لینوکس با توجه به بزرگی و توزیع شده بودن آن و همچنین آشنایی با فرمت فایلها و نحوه ذخیره شدن و ساختار آنها در ساخت گیت مؤثر بودهاست. این تأثیر باعث به وجود آمدن این موارد در پیادهسازی آن شدهاست. گیت از ادغامسازی و شاخهسازی متوالی پشتیبانی میکند؛ و در آن ابزارهای ویژه تصویرسازی و جستجو در تاریخچه کد تعبیه شدهاست. در گیت فرض بر این بودهاست که معمولاً ادغامسازی تغییرهای بیشتر از ایجاد و نوشتن تغییرهای جدید انجام میشود. همچنین در گیت شاخهسازی کم هزینه است و هر شاخهسازی تنها لینکی به یک تغییر دارد؛ و با استفاده از روابط وراثتی در شاخهسازیها شکل کلی بعد از هر شاخهسازی بدست میآید. نظیر بسیاری از نرمافزارهای کنترل نسخه دیگر گیت به هر کاربر یک تاریخچه از تمامی تغییرها میدهد. این تغییرها در شاخههای مختلفی اعمال میشوند و میتوانند با نسخههای دیگر ادغام شوند.
تطبیقپذیری با سیستمهای خارجی و پروتکلها
تاریخچه میتواند در فرمتهای مختلفی از جمله پروتکل انتقال ابرمتن (HTTP) و پروتکل انتقال فایل (FTP) و آرسینک یا یک پروتوکل گیت تحت سوکت یا پوسته ایمن (SSH) منتشر شود. همچنین یک سازنده سرور سیستم نسخههای همروند دارد که توسط آن سیستم نسخههای همروند کاربر و محیط یکپارچه توسعه نرمافزار (IDE) میتوانند به تاریخچه گیت دسترسی پیدا کنند.
پردازش بهینه برای پروژههای بزرگ
آزمایشهای انجام شده روی گیت توسط موزیلا نشان داده که گیت حدود ۱۰ برابر سریعتر از برخی دیگر از نرمافزارهای کنترل نسخه است و همچنین ذخیره تاریخچه تغییرها به صورت محلی باعث شدهاست که سر هم کردن آنها حدود ۱۰۰ بار سریعتر انجام شود. علاوه بر این، گیت به صورتی پیادهسازی میشود که شماره هر نسخه به شماره تمامی نسخههایی که باعث به وجود آمدن آن نسخه شدهاند وابسته است. بعد از منتشر شدن هر نسخه نمیتوان در آن تغییری انجام داد که قابل مشاهده نباشد. گیت در اصل به زبان C و همچنین تعدادی واسطهمیان قسمتهای آن به زبان shell script نوشته شدهاست. اکثر قسمتهای آن برای افزایش بهینگی پردازش و افزایش امکان قابل حمل بودن تغییر یافتهاند ولی ساختار طراحی آن به همان صورت اولیه باقی ماندهاست و هنوز اتصال مؤلفههای آن به راحتی قابل انجام است. الگوریتم ادغامسازی گیت یک ادغامسازی کامل نیست؛ و در مواردی که نتواند ادغامسازی را انجام دهد به کاربر اطلاع داده و از اون میخواهد تا استراتژی مورد نظر خود برای ادغامسازی را انتخاب کند.
نکتهای که در ارتباط با گیت باید به آن دقت کنید در ارتباط با زبالهها هستند. بعضی از قابلیتها و بعضی از پردازههای استفاده نشده در پروژه برای پروژه بدون استفاده خواهند بود، اما در گیت باقی میمانند و به آنها اصطلاحاً آشغال گفته میشود. وقتی حافظه مربوط به آشغالها پر شود گیت به صورت خودکار جمعآوری آشغال را انجام میدهد. همچنین میتوان با دستور git gc –prune اینکار را انجام داد.
جمعآوری دورهای دادههای مجزا
با گسترش پروژه حجم دادهها در فایلهای مختلف بیشتر و بیشتر میشود و هرچند که هر فایل به صورت مجزا فشردهسازی میشود ولی در مجموع فایلها حجم بالایی را اشغال خواهند و پردازش زیادی برای جستجو در میان آنها و پردازش آنها صرف میشود که این موضوع اصلاً بهینه نیست. برای حل این مشکل گیت مجموعه تعدادی از فایلها را در یک بسته نگهداری میکند. روش آن بدین صورت است که احتمال میدهد فایلهای با نام متشابه، محتوای متشابهی نیز داشته باشند و آنها را در یک بسته ذخیره میکند. هرچند که این روش لزوماً درست نیست. عملیات جمعآوری به صورت دورهای و در زمانهایی که فشار کمتری روی سرور باشد انجام میشود، مثل زمانهای خارج از وقت اداری.
کلام آخر
عزیمت از یک سیستم کنترل نسخه متمرکز به سمت یک سامانه کنترل نسخه توزیعی (گیت) روند ساخت نرمافزارها و عملکرد تیمهای نرمافزارهای را تحتالشعاع قرار میدهد. سازمانهایی که به نرمافزارهای سازمانی برای انجام فعالیتهای تجاری متکی هستند با جایگزینی یک جریان کاری جدید تغییراتی در الگوهای تجاری خود مشاهده میکنند. با این توصیف بهکارگیری گیت برای سازمانها و دپارتمانهای عملیاتی (تیم بازاریابی، توسعه، تجاری) چه مزایایی به همراه دارد؟ اصل مهمی وجود که بسیاری از شرکتها و سازمانها از آن غافل هستند، گیت تنها محدود به توسعه نرمافزاری چابک نیست و برای تمامی کسبوکارهای چابک قابل استفاده است. طراحان رابط کاربری و تجربه کاربری یک سازمان ممکن است به دنبال پیادهسازی یک جریان کاربری کاملا جدید یا جایگزینی برخی از آیکونها باشند، ایجاد یک انشعاب جدید یک محیط جعبه شن در اختیار آنها قرار میدهد. آنها میتوانند طرح یا تغییرات خود را بدون آنکه در محصول واقعی اعمال کنند در این محیط آزمایشی اعمال کرده و خروجی نهایی را بررسی کنند که چگونه به نظر میرسد. محدود کردن تغییرات در یک محیط محصور و کنترل شده اجازه میدهد سایر ذینفعان به راحتی طرحها را مشاهده کنند. بهطور مثال، اگر مدیر مهندسی در نظر داشته باشد طرح در دست کار را مشاهده کند، تنها کاری که باید انجام دهد مراجعه به انشعاب ساخته شده است. درج و ادغام انشعابها در محصول نهایی به همان اندازه دور ریختن نمونههای اولیه ساده است، زیرا همه چیز به شکل منظم و ساختیافته طراحی شدهاند تا طراحان رابط کاربری اطمینان حاصل کنند، بهترین محصول در اختیار مشتریان قرار میگیرد.
ماهنامه شبکه را از کجا تهیه کنیم؟
ماهنامه شبکه را میتوانید از کتابخانههای عمومی سراسر کشور و نیز از دکههای روزنامهفروشی تهیه نمائید.
ثبت اشتراک نسخه کاغذی ماهنامه شبکه
ثبت اشتراک نسخه آنلاین
کتاب الکترونیک +Network راهنمای شبکهها
- برای دانلود تنها کتاب کامل ترجمه فارسی +Network اینجا کلیک کنید.
کتاب الکترونیک دوره مقدماتی آموزش پایتون
- اگر قصد یادگیری برنامهنویسی را دارید ولی هیچ پیشزمینهای ندارید اینجا کلیک کنید.
نظر شما چیست؟