آشنایی با Git: درک کلی از نحوه‌ی کار

Introduction to Git: A General Understanding of How it Works

25 بهمن 1399
درسنامه درس 1 از سری آشنایی با Git
git

اگر برنامه نویس و مخصوصا توسعه دهنده وب هستید، حتما می دانید git چیست یا نام git را شنیده اید. در این مقاله و مقالات بعدی قصد دارم به صورت خلاصه برخی از قابلیت های این VCS را با شما مرور کنم اما قبل از آن باید با سیستم های VCS آشنا شویم. ما قصد داریم در یک سری مقاله چند قسمتی ویژگی های مهم و کاربردی git و github را بررسی کنیم.

سیستم های VCS و DVCS

سیستم های VCS (مخفف version control system و به معنی «سیستم کنترل ورژن») تاریخچه تغییرات یک پروژه را دنبال می کند و تغییرات مختلف را ثبت کرده و نزد خود نگه می دارد. این دسته از سیستم ها کاربردهای فراوانی دارند اما کاربرد اصلی و بهترین مزیت آن ها نگهداری تغییرات است (مخصوصا هنگامی که پروژه به صورت کار تیمی جلو میرود). در واقع زمانی که کدها پیچیده شد و حجم پروژه بالا رفت ایجاد تغییرات در پروژه کار خطرناکی است چرا که هر تغییر کوچکی می تواند تمام پروژه را فلج کند. حالا تصور کنید که یک تیم برنامه نویسی روی پروژه ما کار کند و چند نفر از اعضای تیم، قسمتی از کد را تغییر بدهند. در چنین حالتی باید صدها خط کد را بررسی و تحلیل کنیم تا بفهمیم کدام تغییر باعث ایجاد مشکل شده است.

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

توسعه دهندگان با استفاده از git می توانند موارد زیر را بررسی کنند:

  • چه تغییراتی در پروژه به وجود آمده است؟
  • چه کسی تغییرات را ایجاد کرده است؟
  • تغییرات در چه زمانی (تاریخ و ساعت) اعمال شده اند؟
  • چرا به چنین تغییراتی نیاز بوده است؟

حالا که به طور خلاصه با سیستم های VCS آشنا شدید نوبت به آشنایی با DVCS (مخفف distributed version control system و به معنی «سیستم های کنترل ورژن توزیع شده») است. Git یک نمونه عالی از سیستم های DVCS است! سیستم های DVCS معمولا برای پروژه های open-source و متن باز استفاده می شوند. این نوع از سیستم های VCS به تمام کاربران اجازه دسترسی به تمام فایل ها، پوشه ها، branch ها و iteration های یک پروژه را می دهند. همچنین تمام کاربران می توانند به یک تاریخچه کامل و مستقل از تغییرات دسترسی داشته باشند.

برخلاف سیستم های کنترل ورژن مرکزی (centralized version control systems)، سیستم های DVCS مانند Git نیازی به اتصال دائم به repository اصلی ندارند؛ کاربران می توانند هر جایی که باشند کارشان را انجام داده و از هر منطقه زمانی و بدون وابستگی به دیگران تغییرات را اعمال کنند. بدون وجود این سیستم ها توسعه دهندگان مجبور هستند که از هر نسخه پروژه چندین بار کپی بگیرند که باعث ایجاد آرشیوی شلوغ و به هم ریخته از انواع فایل های درهم می شود.

سوال دیگری که مطرح می شود این است: چرا از بین سیستم های کنترل ورژن باید git را انتخاب کنیم؟

چرا git؟

بر اساس نظرسنجی انجام شده در سایت stackoverflow بیش از 70 درصد توسعه دهندگان از Git استفاده می کنند. بنابراین Git بالاترین میزان استفاده و کاربر را در تمام دنیا به خود اختصاص داده است. شما می توانید از Git برای پروژه های open-source و حتی پروژه های تجاری استفاده کنید. از دلایل اصلی استفاده از Git می توان به موارد زیر اشاره کرد:

  • Git به توسعه دهندگان اجازه می دهد که تمام timeline تغییرات، تمامی تصمیم های اتخاذ شده، پیشرفت پروژه و... را در یک جا مشاهده کنند. بنابراین هر زمان که توسعه دهنده جدیدی وارد پروژه شود، از زمانی که به history (تاریخچه ی) تغییرات دسترسی پیدا می کنند می تواند تمامی تغییرات و تاریخچه پروژه را مشاهده کرده و درک کند که پروژه به چه سمت و جهتی در حال حرکت است.
  • توسعه دهندگان می توانند از هر منطقه زمانی که در آن هستند با پروژه همکاری کنند. در واقع توسعه دهندگان با استفاده از سیستم های DVCS مانند git می توانند با حفظ تمامیت کدهای پروژه با دیگر توسعه دهندگان همکاری داشته باشند؛ آن ها می توانند با استفاده از branch ها (به معنی «شاخه») پیشنهاد تغییرات سورس کد اصلی را بدهند، بدون اینکه پروژه در خطر قرار بگیرد.
  • کسب و کارهایی که از Git استفاده می کنند دیگر مانعی برای تعامل توسعه دهندگان و افراد تیم نخواهند داشت و همگی می توانند روی هدف اصلی تمرکز کنند. همچنین Git به شما اجازه می دهد که متخصصین حوزه های مختلف را در کنار یکدیگر جمع کنید.

Repository و commit چیست؟

repository ها (یا همان پروژه های Git) تمامی فایل ها و پوشه های مربوط به یک پروژه را درون خود نگه می دارند. تغییرات تک تک فایل ها نیز در همین قسمت ذخیره می شود. تاریخچه هر فایل مانند یک snapshot ذخیره می شود که به آن commit می گوییم و این commit ها هستند که یک branch را می سازند. بگذارید به زبان ساده تر توضیح بدهم:

  • repository: ساده ترین عنصر Git است. برای درک راحت تر آن ها می توانید repository را مانند پوشه اصلی پروژه خود تصور کنید که تمام فایل ها و پوشه های دیگر درون آن قرار دارد. repository ها میتوانند دارای چندین توسعه دهنده باشند و یکی از دو حالت public (عمومی) یا private (خصوصی) را می گیرند.
  • branch: نسخه ای موازی (کپی شده) از repository است. با استفاده از branch میتوانید تغییرات خود را در پروژه اعمال کنید بدون اینکه کدهای اصلی را تغییر دهید (چرا که تغییرات روی یک نسخه کپی شده اعمال خواهد شد). branch درون repository قرار میگیرد اما روی کدهای اصلی پروژه (master branch) تاثیری نمیگذارد. زمانی که تغییراتی را در یک branch ایجاد کنید و از تغییرات راضی باشید می توانید آن branch را با شاخه اصلی (master branch) که کدهای اصلی پروژه اند ادغام (merge) کنید تا تغییرات روی نسخه اصلی برنامه اعمال شوند. اطلاعات بیشتر.
  • commit: بازبینی یا تغییرات فایل ها هستند. commit ها دقیقا مانند زمانی هستند که یک فایل را save میکنید اما به شرط اینکه فایل خود را با git ذخیره کرده باشید. هر زمان که با git فایلی را ذخیره (Save) میکنید یک id خاص برای آن تغییر ساخته می شود (SHA یا hash) که با استفاده از آن می توانید تغییرات ایجاد شده را شناسایی و رهگیری کنید. Commit ها معمولا چیزی به نام commit message دارند که توضیحی خلاصه درباره تغییر ایجاد شده است.

هشدار: طبیعت سیستم های DVCS بدین صورت است که repository ها مستقل هستند بنابراین هر فردی که یک کپی از repository را داشته باشد به تمام کد ها و تاریخچه آن ها دسترسی خواهد داشت.

سوال: نقش وب سایت GitHub در این میان چیست؟

پاسخ: Git غیر متمرکز (decentralized) است یعنی  برای ذخیره فایل ها و تغییرات آن ها به هیچ سروری وابسته نیست و تمام فایل ها را به صورت محلی روی هارد درایو کامپیوتر خودتان ذخیره می کند. این یک ویژگی بسیار عالی است اما اگر بخواهیم کار گروهی و Remote (دورکاری) انجام دهیم باید محلی داشته باشیم که افراد مختلف بتوانند به آن دسترسی داشته باشند (واضح است که افراد مختلف به هارد درایو شما دسترسی ندارند). اینجاست که وب سایت هایی مانند GitHub و  BitBucket وارد عمل می شوند. شما می توانید پوشه اصلی پروژه خود را (که به آن repository میگوییم) درون یک repository از سایت GitHub قرار دهید تا افراد مختلف و مورد نظر خودتان به کد های شما دسترسی داشته باشند.

در قسمت های بعدی در مورد git و github بیشتر صحبت خواهیم کرد.

تمام فصل‌های سری ترتیبی که روکسو برای مطالعه‌ی دروس سری آشنایی با Git توصیه می‌کند:
نویسنده شوید
دیدگاه‌های شما (1 دیدگاه)

در این قسمت، به پرسش‌های تخصصی شما درباره‌ی محتوای مقاله پاسخ داده نمی‌شود. سوالات خود را اینجا بپرسید.

سید مهدی
31 شهریور 1398
سلام چقدر از git صحبت میکنید؟ کامل هست دوره؟

در این قسمت، به پرسش‌های تخصصی شما درباره‌ی محتوای مقاله پاسخ داده نمی‌شود. سوالات خود را اینجا بپرسید.

امیر زوارمی
03 مهر 1398
سلام دوست عزیز، این مقالات به صورت «دوره ی آموزشی» نیستن... بیشتر نکات مهم git رو توضیح دادیم + مسائل پایه ای رو تا از اونجا به بعد خودتون بتونین به راحتی یاد بگیرین.

در این قسمت، به پرسش‌های تخصصی شما درباره‌ی محتوای مقاله پاسخ داده نمی‌شود. سوالات خود را اینجا بپرسید.