(version control System) Source Control چیست؟

1398/01/28
سورس کنترل یا ورژن کنترل ها یک مکانیزمی است که این امکان را فراهم میکند که سورس پروژه بر روی آن قرار گیرد و تغییرات در آن مدیریت شود، همچنین تغییرات در فایل ها در آن تحت یک رکورد ذخیره شده و اعمال می گردد و همچنین امکان قرار دادن کامنت و توضیحات را برای افراد تیم فراهم میکند تا هر کس متوجه شود بر روی چه فایل هایی تغییرات اعمال کرده است.سورس کنترل ها به شما این اطمینان را می دهند که آخرین ورژن برنامه در دسترس می باشد و اگر هر یک از افراد تیم تغییراتی را در برنامه اعمال کرده باشند به صورت اتوماتیک در آخرین ورژن برنامه وجود دارد و نیازی به انتقال دستی آن نمی باشد.
Version-Control-Software.png

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

انواع source control ها

version-control-systems1.png
بسته به نوع مدیریتی که در سورس کنترل ها پیاده سازی شده است سورس کنترل ها انواع مختلفی دارند. در حالت کلی سورس کنترل ها به دو دسته اصلی سورس کنترل های متمرکز Centralized Version Control Systems)) و سورس کنترل های توزیع شده (Distributed Version Control Systems) تقسیم بندی می شوند.
 
  • Source control های متمرکز  (Centralized Version Control Systems)
در سورس کنترل های متمرکز یک سرور اصلی وجود دارد که سورس بر روی آن قرار می گیرد و زمانیکه یک برنامه نویس درخواست دریافت سورس را بدهد بسته به این که قبلا پروژه را داشته یا نه، کل پروژه یا بخشی از آن را که توسط سایر افراد تغییر کرده است را دریافت میکند. در این مدل یک مخزن (Repository) داریم که روی یک سرور قرار می‌گیره که شامل کل پروژه با تاریخچه‌اش است. به طور مثال TFS و SVN از جمله سورس کنترل های متمرکز هستند. از جمله عملیات قابل انجام در این نوع checkin وcheckout  برای ارسال و دریافت فایل ها می باشد. single checkout از قابلیت های TFS است که در آن در یک زمان تنها یک کاربر بر روی یک فایل کارمی کند و برای سایر افراد این فایل قفل می شود.  یکی از مشکلات این نوع سورس کنترل ها این است که در صورتیکه سرور به هر دلیلی از کار بیفتد دیگر امکان ارسال و دریافت فایل ها وجود ندارد و روند ادامه کار با مشکل روبرو میشود.
 
  • Source control های توزیع شده  (Distributed Version Control Systems)
در این نوع سورس کنترل ها زمانیکه عمل checkout انجام گیرد تمام فایل ها و داده های مدیریتی و تاریخچه ورژن ها به مبدا ارسال میشود و تمامی افراد تیم یک نسخه کامل از کل پروژه دارند و در صورتیکه مشکلی برای نسخه سرور بوجود آید با نسخه یکی از اعضای تیم جایگزین خواهد شد. از جمله سورس کنترل های متمرکز میتوان Git , Mercurial, Bazaar و... را نام برد. یکی از قابلیت‌هایی که در این سیستم‌های سورس کنترل وجود دارد این است که کلاینت ها را می‌توان در گروه‌های مختلف قرار داد که همزمان با هم بر روی پروژه کار کنند. در بخش قبلی به معرفی انواع سورس کنترل ها پرداختیم حال در این قسمت به بررسی دقیق تر دو سورس کنترل TFS و Git خواهیم پرداخت.
 

عملیات قابل انجام بر روی TFS

team-foundation-server-dashboard.png
 
     Team Foundation Server یا به اختصار TFS محصول مایکروسافت است که توسعه دهندگان از آن برای کنترل ورژن پروژه های مختلف از آن استفاده می کنند. از TFS می توان برای عملیاتی مانند مدیریت کاربران و کنترل دسترسی هرکدام به پروژه ها نیز استفاده شود. نرم افزار TFS در کنار مدیریت پروژه بین اعضاء تیم برنامه نویسی قادر است مدیریت زمان را بین اعضاء یک تیم با الگوریتم Scrum انجام دهد از این رو یکی از محبوب ترین نرم افزار های Team Working محسوب می شود.  از سورس کنترلهای git و یا TFVC پشتیبانی میکند. محیط برنامه کاملا توسعه یافته و دارای گرافیک بالا و زیبایی می باشد که می توانید براحتی کدهای خود را مدیریت نمایید.عملیاتی که برای کار با پروژه می توان انجام داد کارهای زیر می باشد
 
عملMap
این عمل را هنگامی باید انجام داد که شما برای بار اول می خواهید پروژه را بر روی سیستم خود کپی کنید. با مپ کردن یک محل برای ذخیره سازی فایل های پروژه مشخص می شود و آن مسیر به عنوان مسیر پروژه ذخیره می شود. دقت داشته باشید که هنگام مپ کردن فایلی کپی نمی شود و فقط محل ذخیره سازی فایل ها مشخص می شود

عمل Get Latest Version
با این عمل فایل هایی که بر روی سیستم شما موجود است بررسی می شود. و فایل هایی که وجود ندارد و یا این که ورژن فایل ها قدیمی است آن فایل ها را بر روی سیستم شما کپی می کند. شما بعد از عمل مپ کردن نیز باید عمل Get Latest Version را انجام دهید تا کل فایل های پروژه بر روی سیستم شما دانلود شود

عمل Undo pending changes
اگر شما تغییراتی بر روی پروژه انجام داده باشید و بخواهید که از اعمال آن تغییرات بر روی سرور انصراف دهید باید تغییرات را undo کنید. با این کار فایل هایی را که تغییر داده بودید از سرور درخواست می شود و همه تغییراتی را که انجام داده بودید نادیده گرفته می شود و فایل موجود در سرور لود خواهد شد.
 
عمل check in
این عمل شبیه عمل push در سیستم گیت است. یعنی تغییراتی را که انجام داده اید را بر روی سرور آپلود می کند. البته قبل از آن شما می توانید یک کامنت و توضیحاتی برای این ورژن از فایل ها قرار دهید و شرح بدهید که چه تغییراتی انجام شده است. البته نوشتن توضیحات در tfs اجباری نیست ولی در گیت شما باید توضیحات را وارد کنید. هر check in یک شماره دارد
 
عمل Compare
اگر شما بخواهید ببینید که فایل شما در مقایسه با یکی از فایل های سرور چه تغییراتی داشته است از دستور compare استفاده می کنید. در این حالت تغییرات و حذف و اضافه ها را با رنگ های مختلف یه شما نشان می دهد
 
عمل Get Specific Version
برخی اوقات شما نمی خواهید که آخرین ورژن موجود بر روی tfs را دریافت کنید بلکه می خواهید یک ورژن خاص را از سرور دریافت کنید وتغییرات آن را ببینید. برای این کار از Get Specific Version استفاده می شود. با این کار پنجره ای باز می شود که به شما اجازه می دهد ورژنی از پروژه را که می خواهید انتخاب کنید و از سرور دریافت نمایید
 
عمل shelve pending changes
حالتی را در نظر بگیرید که کار شما تمام نشده است ولی باید تغییرات خود را بر روی سرور آپلود کنید ولی جزء ورژن های پروژه محصوب نشود در این صورت شما می توانید از این عمل استفاده کنید. و بعدا آن را گرفته و ادامه دهید. یکی از خواصی که tfs دارد این است که وقتی که کلاینتی یک فایل را ویرایش می کند می توان طوری پیکر بندی کرد که سایر کلاینت ها نتوانند دیگر آن فایل را ویرایش کنند و فایل مورد نظر برای آنها قفل می شود. برای این کار در سطح سرور باید single checkout را فعال کنیم
 

عملیات معمول سیستم Git

git-dashboard.png

بر روی سورس کنترل Git اعمال متنوعی برای کار با سورس انجام می شود که در ادامه آمده است. شما برای استفاده از گیت می توانید هم از خط فرمان آن استفاده کنید و یا هم می‌توانید از ابزارهای ویژوالی که تعداد آن‌ها هم بسیار است استفاده کنید. ما در این مطلب به معنی و مفهوم هرکدام از عملیات می‌پردازیم

عملیات clone 
حالتی را در نظر بگیرید که شما در یک تیم عضو شده‌اید و یا می‌خواهید از سایت گیت هاب یک سورس را بگیرید در حالی که هیچ فایلی از سورس مورد نظر را ندارید. در این حالت شما باید پروژه را clone کنید. به عبارت دیگر عملی که برای اولین بار انجام می‌شود و کل پروژه را به همراه repository های آن دریافت می‌کند را clone می گوییم. با clone کردن یک پروژه کل فایل‌های پروژه مورد نظر به سیستم شما کپی می‌شود و در محلی که مشخص کرده‌اید ریخته می شود. کل فایل‌ها و تنظیمات و تاریخچه تغییر فایل‌ها به سیستم شما کپی خواهد شد. دوستان دقت کنند که تاریخچه پروژه معمولاً در سیستم گیت در یک پوشه git نگهداری می شود.که معمولاً این پوشه مخفی می باشد.در ضمن این‌طور نیست که بگوییم چون این پوشه تاریخچه و اطلاعات را نگهداری می‌کند حجم بسیار زیادی دارد شما اگر این پوشه را ببینید می‌فهمید که حجم کمی را به خود اختصاص داده است

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

عملیات  Revert
اگر شما کامیت انجام داده باشید و از انجام آن پشیمان شده باشید شما می‌توانید آن کامیت را revert کنید. این کار باعث می‌شود که در رکوردهای کامیت یک کامیت جدید اضافه شود که تغییرات کامیت قبلی را ندارد. به عبارت دیگر revert کردن undo کردن تغییراتی است که انجام داده ایم. البته در سیستم گیت عملیات دیگری نیز برای undo کردن وجود دارند مانند reset و یا checkout که پیشنهاد می‌شود خود شما در مورد آن‌ها مطالعه کنید

عملیات  push
وقتی که یک سری تغییرات انجام شد و شما نیز آن‌ها را کامیت کردید تغییرات بر روی سیستم شما انجام شده است و هنوز بر روی سرور آپلود نشده است. پس بقیه اعضای تیم نمی‌توانند از تغییرات شما خبردار شوند. برای اینکه تغییرات شما بر روی سرور آپلود شود شما باید کامیت های انجام شده را push کنید. دقت کنید که اول باید کامیت کنید سپس کامیت ها را push نمایید. با این کار فایل‌های تغییر داده شده شما به سرور انتقال می یابند و بقیه نیز می‌توانند تغییرات شما را با جزئیات مشاهده کنند

عمل  pull
اگر شما بخواهید تغییرات انجام شده توسط دیگر اعضای تیم را بر روی کامپیوتر خود لود کنید باید این از سرور عمل pull را انجام دهید. با این کار بررسی می‌شود که کدام یک از فایل‌هایی که دست شما است تغییر کرده است‌. سپس آخرین نسخه از آن فایل‌ها از سرور گرفته و بر روی سیستم شما قرار داده می شوند. همچنین repository شما نیز آپدیت خواهد شد

عمل  merge
حالتی را در نظر بگیریدکه شما بر روی یک فایل کار می‌کنید و یکی دیگر از اعضای تیم نیز بر روی همان فایل کار می کند. حال کار شما با فایل تمام شده و آن را کامیت کرده و بر روی سرور push می‌کنید. حال هم تیمی شما تغییراتی که شما انجام داده‌اید را ندارد. چون او هنوز pull نکرده است وهمچنین او نیز فایل مورد نظر را تغییر داده است. وقتی که هم تیمی شما می خواهد فایل را push کند سیستم گیت تشخیص می‌دهد که فایل قبلاً هم تغییر کرده است. بنابراین پیام میدهد که شما باید فایل را merge کنید. یعنی تغییرات شما وخودش را در یک فایل قرار دهد و جاهایی را که با هم تداخل دارند را تشخیص بدهد و مشکل را برطرف کند. برای merge کردن باید دو فایل را مقایسه یا compare کند. ابزار های بسیاری هستند که دو صفحه کد را با هم مقایسه می‌کنند و جاهایی که بین دو فایل متفاوت است را به رنگ دیگری نشان می‌دهند و این قابلیت را دارند که هر قسمت از تغییرات را که خواستید از فایلی به فایل دیگر اعمال کنید.

کنتیکو و سورس کنترل ها


Dashboard.PNG
کنتیکو با استفاده از راه حل یکپارچه سازی مداوم (continuous integration) امکان مرتب سازی اشیای داده ای دیتابیس را به فایلXML  در فایل سیستم می دهد.سپس شما قادر خواهید بود فایل های خود را به یک سورس کنترل (برای مثال TFS یا GIT) اضافه کنید و به این ترتیب با استفاده از این سورس کنترل ها هماهنگ سازی داده های دیتابیس بین اعضای تیم اتفاق می افتد.سیستم تضمین می کند که داده های XML ی اشیا همیشه سازگار و یکسان است.سیستم فایل های XML را در پروژه در فولدری با این مسیر CMS\App_Data\CIRepositoryذخیره می کند.

موارد استفاده راه حل یکپارچه سازی مداوم :

  • موارد توسعه چندگانه که هر کدام با فایل ها و دیتابیس خود پروژه می باشد.
  • در یک سورس کنترل مرکزی که تغییرات مدیریتی و کنترل ورژن را برای فایل ها فراهم می کند.
قبل از استفاده از این روش موارد زیر را انجام دهید:
  1. نصب یک اینستنس جدید از کنتیکو
  2. فعالسازی قابلیت continuous integration در کنتیکو
  3. گرفتن بک آپ از دیتابیس
  4. تمام  Kentico را به کنترل منبع خود اضافه کنید (اضافه کردن تنها پوشه CIRepository ممکن است به مشکلات منجر شود و توصیه نمی شود).
  5. بازیابی فایل های تغییر یافته در دیتابیس
  6. استفاده از ویژوال استودیو با سورس کنترل هایی همچون TFS یا  GIT
محدودیت ها
این راه حل در حال حاضر دارای محدودیت های زیر است:
  • یکپارچه سازی مداوم تنها تغییرات اعمال شده برروی اشیای ادمین کنتیکو یا API  دنبال میکند و تغییرات ایجاد شده در پایگاه داده و یا ابزارهای خارجی که پایگاه داده را تغییر می دهند، ردیابی نمی شوند. پس از ایجاد چنین تغییراتی، شما باید تمام اشیاء را در یکپارچه سازی مداوم به صورت دستی سریال کنید تا همگام سازی پایگاه داده با مخزن فایل سیستم انجام شود. به عنوان مثال، یکپارچه سازی پیوسته، نقش های وارد شده توسط ابزار خارجی AD را دنبال نمی کند.
  • این سیستم قابل استفاده در محیط هایی که  فولدر CIRepository روی یک  shared file system قرار دارد نیست.
  • زمان بازیابی محتوا از یک مخزن یکپارچه سازی مداوم روی کنتیکو با قابلیت staging سیستم نمی تواند هماهنگ سازی taskهای log staging  را برای تغییرات انجام شده برروی صفحه را انجام دهد.
  • نوع خاصی از اشیا توسط یکپارچه سازی مداوم پشتیبانی می شود.نوع اشیایی که به داده های سایت آنلاین اشاره میکند و یا اینکه به داده خاصی اشاره میکند توسط آن پشتیبانی نمی شود.

تجربه یک شخص با کنتیکو و سورس کنترل GIT



 
User Avatar
نویسنده : نسرین قنبری
امتیاز شما :

دیدگاه کاربران



ارسال پیام



 Security code