کنترل کننده ورژن یا VCS چیست ؟

موضوع : مقالات عمومی کامپیوتر | تاریخ : ۱۲ مرداد ۱۳۹۲ | نویسنده : حسین رضازاده حامد

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

به طور حتم شما تا به حال بدون اینکه از این سیستم اطلاعی داشته باشید مانند آنرا پیاده سازی کرده اید، آیا فایل هایی شبیه به این ها را تا به حال ساخته اید ؟

Asnad-esfande90.doc

Asnad-farvardin91.doc

logo-old.png

دلیل آن که شما از “save As”  استفاده می کنید این است که شما می خواهید یک فایل جدید داشته باشید بدون آنکه نسخه فعلی آنرا از بین ببرید ، این یک مشکل شایع در بین کاربران است  که راه حل های آن معمولا یکی از موارد زیر است:

·        ساختbackup آپ از فایل (Document.old.txt).

·        اگر باهوش باشید ، یک ورژن و یا تاریخ به آن اضافه می کنید : Document_V1.txt, Documentesfande90.txt

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

چرا ما به یک سیستم کنترل کننده ورژن (VCS) نیاز داریم ؟

سیستم پوشه اشتراکی / نام گذاری برای پروژه های طبقه بندی شده یا کوتاه مدت مناسب هستند . اما برای پروژه های برنامه نویسی، اصلا .

آیا به نظر شما امکان دارد یک پوشه اشتراکی به نام "Windows2007-Latest-UPDATED!!”وجود داشته باشد ، تا هر برنامه نویسی روی یکی از زیر پوشه های آن کار کند ؟ امکان ندارد.

پروژه های بزرگ و با پیشرفت سریع با ویراستار های بسیار به یک سیستم کنترل ورژن نیاز دارند تا بتوانند تغییرات را دنبال کنند و از ایجاد بی نظمی های بزرگ جلوگیری کنند ، یک VCS  خوب کارهای زیر را می تواند انجام دهد :

·        پشتیبان گیری و بازیابی :  در صورتی که به نسخه قبلی ( در یک تاریخ خاص ) یک فایل که ویرایش شده است نیاز دارید  به راحتی می توانید به آن فایل دست پیدا کنید

·        همگامی :به افراد اجازه می دهید تا با داشتن آخرین ورژن همیشه بروز باشند

·        بازگشت به تغییرات کوتاه مدت :فایل شما خراب شده ؟ تغییرات خود را از بین ببرید و به آخرین ورژن سالم از فایل خود بازگردید

·        بازگشت به تغییرات بلند مدت :یک مشکل اساسی پیش آمده و شما حدس می زنید به خاطر تغییری بوده که 1 سال پیش ایجاد کرده اید ، به راحتی به آن تاریخ برگردید و ببینید چه چیزی را تغییر داده اید

·        پیگیری تغییرات :زمانی که تغییری در فایل ایجاد می کنید ، می توانید پیامی ایجاد کنید و دلیل تغییر فایل را بیان کنید ( این پیام در فایل ذخیره نمی شود بلکه در VCS  ذخیره خواهد شد ) این به شما امکان می دهد تا ببینید فایل چرا و چگونه تغییر کرده است.

·        پیگیری تغییرات توسط اشخاص :VCS  تمامی تغییرات را با نام کسی که آنرا تغییر داده است ثبت خواهد کرد

·        تغییرات در محیطی امن (Sandbox): و یا بیمه کردن در برابر خودتان . می خواهید تغییر بزرگی ایجاد کنید ؟ می توانید تغییرات مختصری در یک محیط ایزوله شده انجام داده ، آنرا تست کنید و سپس تغییرات را ذخیره کنید

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

پوشه اشتراکی سریع و راحت است ، ولی نمی تواند این قابلیت ها را در اختیار شما بگذارد

یادگیری زبان ویژه این کار

تمامی کنترل کننده های ورژن کار های زیر را انجام می دهند ، فقط ممکن نام آنها متفاوت باشد

برپایی اولیه :

·        مخزن (Repository) : دیتابیس ذخیره فایل ها

·        سرور :کامپیوتری که این مخزن را نگه داری می کند

·        کلاینت :کامپیوتری که با این مخزن در ارتباط است

·        Working Set/Working Copy: محل قرار گیری فایل های شما در کامپیوترتان ، جایی که تغیرات را اعمال می کنید

·        Trunk/Main:محل اصلی کد های شما در مخزن . اگر کد ها را به شکل یک شجره خانوادگی در نظر بگیرید –Trunk  اولین خط خواهد بود

عملیات اولیه :

·        Add:قرار دادن فایل در مخزن برای اولین بار ، به طور مثال برای شروع پیگیری آن در کنترل کننده ورژن.

·        Revision: بیان کننده ورژن فایل (v1 , v2 , …)

·        Check out: دانلود فایل از مخزن

·        Check in:آپلود یک فایل به مخزن ( اگر تغییری در آن ایجاد شده باشد ) . فایل یک شماره revision  دریافت می کند  ، و افراد می توانند با Check out  آخرین را دریافت کنند

·        Checkin Message: یک پیغام کوتاه در مورد تغییراتی که انجام شده

·        Changelog/History: یک لیست از تغییرات ایجاد شده بر روی یک فایل از زمان شروع آن

·        Update/Sync:همگام سازی فایل ها با آخرین ورژن موجود در مخزن . این به شما اجازه می دهد تا آخرین ورژن فایل را از مخزن دریافت کنید

·        Revert: تمام تغییرات شما را از بین می برد و آخرین ورژن را از سرور بارگذاری می کند

عملیات پیچیده :

·        Branch: ساخت یک کپی از یک فایل/پوشه برای استفاده شخصی ( باگ گیری ، تست کردن و امثال آن )

·        Diff/Change/Delta:پیدا کردن تفاوت ها بین 2 فایل . مناسب برای پیدا کردن تغییرات بین revisionمختلف

·        Merge:اعمال تغییرات از یک فایل به فایل دیگر ، برای بروز کردن ان . به طور مثال شما می توانید قابلیت بیشتری را از یک branch  به دیگری اضافه کنید

·        Conflict: زمانی ایجاد می شود که تغییرات در یک فایل نمی تواند اعمال شود و توسط فایل دیگر رد می شود ( زمانی که فایل در مخزن با فایل شما قبل از تغییر متفاوت است )

·        Resolve: حل مشکل رد کردن فایل ها

·        Locking: یک فایل را قفل می کند ، بنابراین کس دیگری نمی تواند در فایل تغییری ایجاد کند ، بعضی از کنترل کننده های ورژن از این قابلیت استفاده می کنید تا از بروز مغایرت (conflict) جلوگیری کنند

·        Breaking the lock:از بین بردن قفل به زور . بنابراین می توانید آنرا ویرایش کنید . این عمل در شرایطی که یک فرد فایلی را قفل کرده است و به مرخصی رفته است مفید است

·        Check outبرای ویرایش : دریافت یک نسخه قابل ویرایش از فایل

 

مثال تصویری :

Checkins

ساده ترین سناریو Checkinsاست ، آپلود یک فایل به مخزن و ویرایش ان

هر باری که یک ورژن جدید از فایل را  به مخزن می فرستیم فایل ورژن جدیدی دریافت می کند (r1, r2, r3)

دستور این کار در Subversionبه این شکل است :

svn add list.txt

(modify the file)

svn ci list.txt -m "Changed the list"

 

نشانه –mپیغامی است که می توانید در این آپلود استفاده نمایید

 Checkouts و ویرایش

همیشه شما یک فایل را آپلود نمی کنید ممکن است آنرا دریافت کرده (Checkouts) ، ویرایش کنید و سپس آپلود نمایید  ، این چرخه به این شکل است

ممکن است از تغییرات ایجاد شده راضی نباشید می توانید به ورژن قبلی برگردید(revert) و دوباره شروع کنید .

در هنگام دریافت فایل از مخزن ، شما آخرین ورژن فایل را به صورت پیشفرض دریافت می کنید ، اگر مایل باشید می توانید یک ورژن خاص از فایل را ذخیره کنید ، در Subversionکد زیر را اجرا کنید :

svn co list.txt (get latest version)
...edit file...
svn revert list.txt (throw away changes)
 
svn co -r2 list.txt (check out particular version)

تفاوت ها

Svnتاریخچه تغییرات یک فایل ذخیره می کند ، تفاوت ها تغییراتی هستند که شما در زمان ویرایش یک فایل ایجاد می کنید ، می توانید این تغییرات را جدا کنید و به فایل های دیگر اعمال کنید

برای مثال برای رفتن از ورژن r1  به ورژن r2  (eggs) به فایل اضافه شده است ، مانند این است که برچسب قرمز را جدا کرده و به ورژن r1اضافه کنید تا ورژن r2را داشته باشید

و برای رفتن به ورژن r3، (Juice) به فایل اضافه شده است و در ورژن r4، (juice)حذف شده و (soup)  اضافه شده است

بیشتر سیستم های کنترل کننده ورژن ،  تفاوت ها را به جای یک کپی کامل از فایل نگه می دارند ، این کار باعث کم تر شدن حجم شده و فضای کمتری از هارد را مصرف می کند ، به طور مثال 4 ورژن از یک فایل به این معنی نیست که ما 4 کپی کامل از یک فایل را داریم ، بلکه فقط 1 کپی و 4 تغییر ذخیره شده آنرا داریم ، در SVNتغییرات بین 2 ورژن را با این کد می بینیم :

svn diff -r3:4 list.txt

منشعب کردن

منشعب کردن به ما اجازه می دهد ، تا فایل ها را در پوشه ای جداگانه قرار دهیم و تغییرات را جدا گانه  از سیستم اعمال کنیم

 

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

در Subversion،ساخت یک انشعاب جدید به راحتی با کپی کردن به یک پوشه جدید امکان پذیر خواهد بود

svn copy http://path/to/trunk http://path/to/branch

 

ادغام کردن

 

 

اگر ورژن r6و r7را مقایسه کنیم ،  "Bread" را که در فایلی اصلی وجود دارد از دست خواهیم داد ، برای مثال می توان تغییرات ورژن آزمایشی را از جدا کرد و ورژن اصلی انتقال داد ، فایل اصلی ممکن است تغییرات دیگری نیز داشته باشد ، که این مهم نیست ، ما فقط می خواهیم تا تغییرات جدید (Rice) را به فایل اضافه کنیم  

در Subversion، دستور اینکار بسیار شبیه به بخش تفاوت هاست :

svn merge -r5:6 http://path/to/branch

این دستور تغییرات ورژن r5  و r6  را خارج می کند و با فایل اصلی ادغام می کند

مغایرت

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

 

در این مقاله ، به بررسی اجمالی و اولیه این سیستم ها پرداختیم ، در مقاله بعدی به مقایسه SVN, Git, Mercurial,  و CVS خواهیم پرداخت

برچسب ها : SVN - Git - کنترل کننده ورژن - CSV - Mercurial
h1

دیدگاه:

نام
پست الکترونیک
سایت
دیدگاه
کد امنیتی :
h1
طراحی وب سایت و پرتال داده پرداز پویای شریف
info@dadehpardaz.com
تلفن : 88659468
فکس : 88659470
سامانه پیامک: 02188652149
ما را در شبکه اجتماعی دنبال کنید :