Git
Chapters ▾ 2nd Edition

1.1 آغاز - کنترل نسخه

این فصل راجع به آغاز به کار با Git خواهد بود. در آغاز پیرامونِ تاریخچه‌یِ ابزارهایِ کنترلِ نسخه توضیحاتی خواهیم داد، سپس به چگونگیِ راه‌اندازی Git بر رویِ سیستم‌تان خواهیم پرداخت، و در پایان به تنظیمِ Git و کار با آن. در پایانِ این فصل خواننده علتِ وجود و استفاده از Git را خواهد دانست، و خواهد توانست محیطِ کار با Git را فراهم کند.

کنترل نسخه

کنترل نسخه چیست و چرا باید بدان پرداخت؟ کنترل نسخه ساز و کاری است که تغییرات و دگرگونی ها را به مرور زمان نگهداری میکند و شما می توانید در هر زمانی به نسخه و نگارش خاصی برگردید. ما در این کتاب به کنترل نسخه های کدها و سورسهای نرم افزاری می پردازیم ولی به راستی شما می توانید همه ی گونه های فایلها را کنترل نسخه کنید.

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

سامانه های کنترل نسخه ی محلی

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

در چالش با این مباحث و مسائل، برنامه نویسان پیشتر از این VCS های محلی و فردی را ساختند که یک پایگاه داده ی ساده داشته که تمام تغییرات را نگهداری می کرده است.

Local version control diagram
Figure 1. Local version control.

یکی از شناخته شده ترین ابزاری های کنترل نسخه، سامانه ای است به نام RCS که امروزه در بسیار از کامپیوترها توزیع شده است. مثلا در سیستم عامل معروف Mac OS X اگر ابزارهای توسعه دهنده (Developer Tools) را نصب کنیم. خط فرمان rcs نیز نصب خواهد شد. روش کار RCS، نگه داشتن مجموعه ای از وصله ها ( وصله ها همان تفاوت های بین نگارشهای گوناگون فایلها هستند) در ساختاری ویژه است. در این روش با چسباندن مجموعه ی مشخصی از این وصله ها به هم می توان نسخه ای از فایل را که مربوط به هر زمان دلخواه است دوباره ایجاد کرد.

سامانه های کنترل نسخه ی متمرکز

چالش بزرگ دیگری که مردم با آن روبرو می شوند نیاز به همکاری با توسعه دهندگانی است که با سیستمهای دیگر کار می کنند. در برخود با این چالش سامانه های کنترل نسخه ی متمرکز (CVCSs) ایجاد شده اند. این سامانه ها چون CVS، Subversion و Preforce یک سرور دارند که تمام نگارشهای فایلها را در بر دارد و تعدادی مشتری یا خدمت گیرنده دارند که فایل ها را از سرور جهت انجام تغییرات به امانت می گیرند. سالهای سال این روش استاندارد کنترل نسخه بوده است.

Centralized version control diagram
Figure 2. Centralized version control.

این ساماندهی به ویژه برای VCS های محلی منافع و مزایایی دارد. برای نمونه هرکسی به میزان کنترل شده ای از فعالیت های دیگران روی پروژه آگاهی پیدا می کند. مدیریان دسترسی و کنترل مناسبی بر این دارند که چه کسی چه کاری می تواند انجام دهد. همچنین اداره کردن یک کنترل نسخه ی مرکزی () بسیار ساده تر از درگیر بودن با پایگاه داده محلی روی کلاینت هاست.

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

سامانه های کنترل نسخه توزیع شده

اینجا است که سیستم‌های کنترل نسخه پخشی (DVCSs) نمود پیدا می‌کنند. در یک DVCS (مانند Git، Mercurial، Bazaar یا Darcs) کابران به checkout کردن آخرین تصویر لحظه‌ای فایل‌ها اکتفا نمی‌کنند: آن‌ها مخزن را نیز به‌صورت کامل کپی می‌کنند. بنابراین اگر هر سروری که سیستم‌ها به واسطه آن در حال تعامل با یکدیگر هستند متوقف و از کار بیافتد، با کپی مخرن هر کدام از کاربران برروی سرور، عمل بازیابی انجام می‌گیرد. در واقع هر clone ای، پشتیبان کاملی از تمامی داده‌ها است.

Distributed version control diagram
Figure 3. Distributed version control.

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