گیت یا git چیست؟

03 دی 1399 - آخرین بروزرسانی: 30 بهمن 1399
آشنایی با گیت
زمان تقریبی مطالعه: 11 دقیقه

گیت (git) نوعی سیستم کنترل نسخه  و ورژن توزیع شده (distributed version control system) است. این سیستم به صورت اپن سورس و رایگان در اختیار توسعه دهندگان وب و اپلیکیشن قرار دارد. گیت می‌تواند تغییر پروژه‌ها و فایل‌ها را در گذر زمان مورد ردیابی قرار دهد. سیستم کنترل ورژن می‌تواند تغییرات اعمال شده را در قالب یک فایل یا مجموعه‌ای از فایل‌ها ثبت کند تا بتوانید بعدها نسخه خاصی را بازیابی کنید. گیت ابزار قدرتمندیست که در سال 2005 توسط لینوس توروالدرز خالق لینوکس توسعه و طراحی شد.

اهمیت و کاربرد گیت 

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

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

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

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

 

سفارش یا انجام پروژه‌های برنامه‌نویسی

 

انواع سیستم کنترل ورژن (VCS)

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

  • سیستم کنترل ورژن متمرکز (CVCS)
  • سیستم کنترل ورژن توزیع شده (DVCS)

 

سیستم کنترل ورژن متمرکز با Centralized

سیستم متمرکز، از سرور مرکزی برای ذخیره تمامی فایل‌ها استفاده کرده و امکان همکاری تیمی را فراهم می‌کند. این سیستم روی یک مخزن یا repository واحد کار می‌کند و امکان دسترسی کاربران به سرور مرکزی را به طور مستقیم فراهم می‌کند. برای درک بهتر CVCS به تصویر زیر نگاه کنید.

 

سیستم کنترل ورژن متمرکز قبل از گیت

 

در دیاگرام فوق، repository  یا مخزن، نشان دهنده سرور محلی است که می تواند به صورت محلی یا از راه دور به ورک استیشن (Workstation) برنامه نویس متصل شود. هر برنامه نویس با داده‌های حاضر در  repository می‌تواند ورک استیشن خودش را منسجم و به روز رسانی کرده و داده‌ها را تغییر داده یا به همان داده‌های درون مخزن، بسنده کند. با اینکه نگهداری repository ساده به نظر می‌رسد ولی مشکلات عمده‌ای هم دارد. برخی از آنها:

  • به طور محلی در دسترس نیستند. یعنی همواره باید برای انجام هر کاری به شبکه اینترنت متصل شوید.
  • در صورت صدمه دیدن سرور مرکزی تمامی داده‌ها را از دست می‌دهند. که این شرایط به خاطر متمرکز بودن سیستم است به همین دلیل VCS توزیع شده وارد عرصه شد.

 

سیستم کنترل ورژن توزیع شده(Distributed)

این سیستم برای ذخیره سازی تمامی ورژن‌های فایل پروژه لزوماً به سرور مرکزی نیاز ندارد. هر Contributor در VCS توزیع شده دارای کپی محلی یا نسخه کپی شده از مخزن اصلی است. یعنی هر کسی یک مخزن محلی حاوی فایل‌ها و متادیتای موجود در مخزن اصلی را دارد. با نگاه کردن به تصویر زیر، درک بهتری از VCS توزیع شده پیدا می‌کنید.

 

گیت به عنوان سیستم کنترل ورژن توزیع شده

 

طبق دیاگرام فوق، هر برنامه نویس، مخزن محلی خاص خودش را دارد که نسخه‌ای از مخزن مرکزی قرار گرفته روی hard drive است. آنها بدون هرگونه مداخله‌ای، به روز رسانی و کار با مخزن محلی خودشان را انجام می‌دهند.

برنامه نویسان با وجود داده‌های جدید حاصل از سرور مرکزی، به روزرسانی مخزن‌های محلی خودشان را با عملیات «Pull» انجام می‌دهند و با عملیات «Push» در مخزن محلی می‌توانند مخزن اصلی را تغییر دهند. کلون کردن (cloning) کل مخزن به درون ورک استیشن خودتان برای رسیدن به مخزن محلی، فواید زیر را به همراه دارد:

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

 

مطلب پیشنهادی: برنامه نویسی شی گرا

 

اجزای اصلی گیت

حالا می‌دانیم که گیت به عنوان ابزار کنترل توزیع شده با تأمین داده برای تولید نرم افزار با کیفیت می‌تواند روند کاری غیرخطی و توزیع شده را تحت حمایت قرار دهد. در ادامه به اجزای اصلی git اشاره می‌کنیم.

 

مخزن (Repository)

مخزن که به اختصار آن را repo هم می‌نامند، مجموعه‌ای از کد منبع است. این مخزن حاوی Commits یا نسخه‌های بازنگری شده پروژه است.

 

مخزن گیت

 

نسخه‌های بازنگری شده (Commits)

کامیت‌ها حاوی تغییر یا مجموعه تغییرات در فایل درون مخزن هستند. هر کامیت دارای هش SHA1 منحصر به فردی است که برای ردیابی فایل‌هایی به کار می‌روند که قبلا تغییر کرده‌اند. مجموعه‌ای از کامیت‌ها، git history را می‌سازند.

 

شاخه‌ها یا برنچ‌ها (Branches)

هر برنچ، مجموعه منحصر به فردی از تغییرات کد با نامی منحصر به فرد است. هر مخزن حاوی یک یا چند برنچ است. همه تغییرات در نهایت به صورت برنچ اصلی ترکیب می‌شوند که master نام دارد. این برنچ، ورژن اصلی پروژه است و با مشاهده مخزن پروژه در نشانی github.com/yourname/projectname قابل مشاهده است.

 

مخزن محلی

هر مخزن محلی دارای سه محوطه مجازی متفاوت به شرح زیر است:

  • Working directory
  • Staging area
  • Commit area

فایل‌های جدید در Working directory ساخته می‌شوند، فایل‌های قدیمی از آن حذف می‌شوند یا هرگونه تغییر مدنظر در فایل‌های موجود در این محوطه انجام می‌شود. هنگامی که فایلی ساخته می‌شود به Staging area اضافه می‌شود. محدوده Staging را گاهی اوقات تحت عنوان index می‌نامیم.

 

مناطق مجازی گیت

هنگامی که تغییرات کامل شد، یک یا چند فایل در Staging باید کامیت شوند. گیت برای ساخت کامیت باید کد جدید را از  Staging area بگیرد و کامیت جدید را در مخزن اصلی بسازد. سپس این کامیت به Commit area منتقل می‌شود.

 

کار با گیت

برای کار با git  باید وارد terminal شد و فرمان زیر را در directory پروژه اجرا کرد. این کار باعث شروع دایرکتوری پروژه می‌شود.

 

گیت 1

 

برای اضافه کردن فایل‌ها به گیت، فرمان زیر را اجرا کنید. این کار، فایل‌ها را وارد Staging area می‌کند.

 

گیت 2

 

فرمان زیر را اجرا کنید تا تغییرات این فایل‌ها، کامیت شود.

 

گیت 3

 

هنگامی که تغییراتمان اعمال شد، آن را push می‌کنیم.

 

گیت 4

برای اعمال تغییرات بیشتر در برنچ master باید همین تغییرات دوباره کامیت شوند.

 

فواید به کارگیری گیت کدامند؟

گیت در تمامی تأسیسات VCS توزیع شده در اختیار کاربر قرار می‌گیرد. مخزن‌های git به راحتی پیدا شده و دسترسی به آنها ساده است. فواید به کارگیر سیستم گیت در ادامه تشریح می‌شوند.

 

رایگان و اپن سورس

گیت تحت مجوز اپن سورس GPL)General public License) منتشر شده است. این سیستم کاملا رایگان است. می‌توانید طبق نیازتان کد منبع این سیستم اپن سورس را اصلاح کنید.

 

سرعت

از آنجا که برای اجرای تمامی عملیات‌ها نیازی به هیچگونه شبکه‌ای ندارید، پس تمامی کارها به سرعت انجام می‌شود. تست‌های عملکردی موزیلا نشان می‌دهد که عملکرد این نسخه نسبت به سایر سیستم‌های کنترل ورژن، سریعتر است. واکشی version history از مخزن محلی صد مرتبه سریعتر از واکشی آن از سرور راه دور است. بخش اصلی کیت با زبان C نوسته شده است که زمان اجرای آن در مقایسه با سایر زبانها کمتر است.

 

مطلب پیشنهادی: زبان های برنامه نویسی محبوب

 

قابلیت افزایش اندازه (Scalable)

گیت بسیار مقیاس پذیر است. پس اگر در آینده تعداد برنامه نویسان افزایش یابد، git  به راحتی قادر به مدیریت تغییرات است. از آنجا که git، مخزن کاملی را در اختیار قرار می‌دهد، پس داده‌های ذخیره شده نزد مشتری بسیار اندک است. چون گیت تمامی داده‌های کلان را با تکنیک Lossless Compression، فشرده می‌کند.

 

قابلیت افزایش اندازه گیت

 

قابل اعتماد

هر برنامه نویس دارای مخزن محلی خودش است و در صورت آسیب دیدن سیستم، داده‌های از دست رفته از طریق هر مخزن محلی قابل بازیابی است. همواره بکاپی از تمامی فایل‌ها در اختیارتان است.

 

مطلب پیشنهادی: رزبری پای چیست؟

 

امنیت

گیت از SHA1 (تابع هش امن) برای نامگذاری و شناسایی پروژه‌های درون مخزن استفاده می‌کند. هر فایل و کامیت، چک شده و با کمک Checksum در زمان Checkout قابل بازیابی است. بعلاوه git history هم به طوری ذخیره شده که ID یک نسخه خاص (کامیت) وابسته به هیستوری کامل ایجاد آن کامیت است.

 

مقرون به صرفه

در مورد CVCS، سرور مرکزی آنقدر قدرتمند است که تقاضاهای کل تیم را تأمین می‌کند. این مورد در تیم‌های  کوچکتر چندان مطرح نیست ولی با بزرگتر شدن تیم، محدودیت‌های سخت افزاری سرور مانع از کار می‌شود. توسعه دهندگان در DVCS با سرور سروکار ندارند؛ مگر اینکه نیازی به push یا Pull تغییرات پیدا کنند. تمامی جابجایی‌های سنگین در طرف کاربر صورت گرفته و سخت افزار سرور به طور بسیار ساده عمل می‌کند.

مخزن محلی گیت

حمایت از توسعه غیرخطی

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

 

برنچینگ آسان

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

 

برنچینگ با گیت

 

توسعه توزیع شده

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

 

سازگار با سیستم‌ها یا پروتکل‌های موجود

مخازن از طریق http، ftp یا پروتکل گیت حتی از طریق یک سوکت یا SSh قابل انتشار هستند. گیت دارای شبیه ساز سرور سیستم‌های ورژن کانکورنت (CVS) است که امکان دسترسی به مخازن را به کاربران CVS و پلاگین‌های IDE می‌دهد. مخازن SVK و SVN به طور مستقیم قابل استفاده با git-SVN هستند.

 

چه کسی از گیت استفاده می‌کند؟

گیت در مقایسه با سایر ابزارهای کنترل ورژن در بازار مثل SVN، CVS، Mercurial و غیره محبوبیت بیشتری پیدا کرده است. در نمودار زیر ابزارهای مختلف مقایسه شده‌اند.

 

گیت و سایر ابزارهای کنترل ورژن

 

محصولات نرم افزاری شرکت‌های بزرگ به وسیله توسعه دهندگان نرم افزاری حاضر در سراسر جهان تولید می‌شوند. گیت راه حل خوبی برای برقراری ارتباط میان این افراد است. برخی از شرکت‌های استفاده کننده از گیت شامل فیسبوک، یاهو، Zynga، Quora، توئیتر، eBay، Saleforce، مایکروسافت و بسیاری از شرکت‌های دیگر هستند.

اخیراً تمامی توسعه‌های جدید مایکروسافت با git انجام شده است. بسیاری از پروژه‌های مایکروسافت روی GitHub انجام شده‌اند که تحت مدیریت git قرار دارد. یکی از این پروژه‌ها تحت عنوان lightGBM چهارچوبی برای تقویت گرادیان عملکرد و مبتنی بر الگوریتم‌های درخت تصمیم گیری است که برای رتبه بندی، طبقه بندی و سایت فعالیت‌های یادگیری ماشین به کار می‌رود.

 

در نهایت . . .

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

 

به جمع کدنویسان کارلنسر بپیوندید!

 

 

 

 

 

آیا این مطلب برای شما مفید بود؟
بلهخیر
نویسنده مطلب زینت فلاح
من زینت فلاح، ارشد روان سنجی هستم. بیش از ده ساله که ترجمه متون روانشناسی،مدیریت و فناوری رو انجام میدم. به تولید محتوای جدید علاقمندم و چند ساله که با کارلنسر همکاری دارم. https://www.karlancer.com/profile/1408

دیدگاه شما

یک دیدگاه

  • اردلان
    21 دی 1402

    مفید بود. استفاده کردم. آنطورها اختصاصی نوشته نشده بود ولی بهتر از ترجمه گوگلی خیلی از سایتها بود.