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

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

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


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


سیستم کنترل نسخه ی توزیع شده چیست؟
گیت دارای مخزنی ریموتی است که روی یک سرور و همچنین روی یک مخزن محلی که کامپیوتر توسعه دهنده است ذخیره شده است. به این معنی که کد تنها روی یک سرور مرکزی ذخیره نشده است و نسخه ی کپی کامل آن روی تمامی کامپیوترهای توسعه دهندگان ذخیره شده است. گیت زمانی سیستم کنترل نسخه ی توزیع شده است که کد ها روی همه ی کامپیوترهای توسعه دهندگان موجود باشد.

 

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

به علاوه نیازها در چنین پروژه هایی همواره در حال تغییر است. به همین منظور یک سیستم کنترل ورژن به developer اجازه می دهد که بین version های متفاوت از کد (قدیم یا جدید) انتخاب کند.


به عنوان آخرین مورد از کاربرد، برخی مواقع پروژه های متعددی به صورت موازی از یک codebase استفاده می کنند. در چنین موردی موضوع branching در گیت بسیار مهم است.

 

مخزن لوکال برای گیت خود بسازید
یک پوشه در کامپیوترتان را به پروژه اختصاص دهید. نام این پوشه را simple-git-demo  بگذارید.
به داخل پوشه رفته و از طریق دستور زیر یک مخزن گیت لوکال به پروژه اضافه کنید

cd simple-git-demo
git init

دستور git init یک مخزن Git لوکال به پروژه ی تان اضافه می کند.

حال چند کد کوچک دیگر نیز اضافه می کنید:
در پوشه ی پروژه وارد شوید و فایلی با نام demo.txt بسازید و سپس ادامه ی text زیر را به آن اضافه کنید:
Initial Content


Staging و Committing روی کد ها
Committing  به روندی گفته می شود که کد به مخزن لوکال اضافه می شود. قبل از commit یا تحویل دادن کدها باید در قسمت staging area باشند. Staging area مرحله ای است که مشخص می کند چه فایلهایی قرار است تحویل داده شوند.
هر فایلی که در staging area نیستند commit نخواهند شد. این به توسعه دهندگان امکان آن را می دهد که بر روی فایلهای تحویل دادنی نظارت داشته باشند.

Staging
از دستور زیر برای بردن فایل به staging استفاده کنید:
git add demo.txt
در صورتی که چند فایل باید بفرستید از دستور مشابه زیر استفاده کنید:
git add file1 file2 file3

اگر می خواهید تمامی فایلهای داخل فولدر پروژه را به staging area  اضافه کنید از دستور زیر استفاده کنید:
git add .

از این دستور با دقت استفاده کنید چون تمامی پوشه ها و فایلهایتان را به staging area اضافه می کند.

 

Committing
از دستور زیر برای Commit (تحویل دادن) فایل استفاده کنید:
git commit -m "Initial Commit"

“Initial Commit” تنها یک پیام است. بهتر است نامی متناسب را قرار دهید برای اینکه بعدا بتوانید Commit ها را از هم تشخیص دهید.

Git Status و Git Log
حال فایل demo.txt را ادیت کنید و برش زیر را به آن اضافه کنید:
Initial Content Adding more Content

Status
از دستور git status برای یافتن اطلاعات فایلهایی که ادیت شده اند و یافتن فایلهایی که در staging area قرار دارند استفاده کنید. این دستور اطلاعات دیگری را هم نمایش می دهد که در حال حاضر از آنها چشم پوشی می کنیم.
از دستور زیر برای دیدن Status یا وضعیت استفاده کنید:
git status

Status به شما نشان می دهد که demo.txt ادیت شده و هنوز در staging area قرار ندارد.

حال demo.txt را با staging area اضافه می کنیم و commit  می کنیم با استفاده از دستور زیر:

git add demo.txt git commit -m "demo.txt file is modified"

 

Log
از دستور git log برای نمایش تمامی commit های انجام شده تا حال استفاده کنید
git log
این دستور نشان می دهد چه کسی دستور را وارد کرده، در چه تاریخی و با چه پیامی آن commit را انجام داده است.

Branch یا شاخه چیست؟
یک branch چیزی جز یک اشاره گر به آخرین تحویل در مخزن git نیست. در حال حاضر master branch برای ما نشان گری به دومین commit انجام شده است:  “demo.txt file is modified”

چرا  به چندین branch نیاز است؟
برای پشتیبانی از توسعه ی موازی به چندین شاخه نیاز است. عکس زیر نشان دهنده ی نحوه ی کارکرد branch را نشان می دهد:

در شاخه ی Master در ابتدا commit 1 و commit 2 انجام شد. پس از commit 2 یک شاخه ی جدید به نام Test ساخته شد و commit 3 و commit 4 انجام شده و به شاخه ی Test اضافه می شوند.

در همان زمان commit 3  و commit 4 به شاخه ی Master اضافه می شوند. اینجا می توانیم ببینیم که پس از commit 2 دو توسعه ی موازی به صورت جداگانه در دو شاخه ی متفاوت در حال انجام هستند.

شاخه ی Test و شاخه ی اصلی Master در همین جا از یکدیگر جدا شدند و کدهای متفاوتی دارند. کد از شاخه ی Test می تواند با کد موجود در شاخه ی Master ادغام شود با وسیله ی دستور: git merge

 

ساخت شاخه ی جدید در لوکال
به وسیله ی دستور زیر می توانیم شاخه ی جدیدی بسازیم:
git branch test

این دستور شاخه ی test را می سازد.

ما همچنان در master branch هستیم. برای سوییچ کردن بین شاخه ها و رفتن به test branch از دستور زیر استفاده می کنیم:
git checkout test

اکنون ما در test branch هستیم. شما می توانید تمامی شاخه ها را با دستور زیر لیست کنید:
git branch

انجام commit در شاخه ی جدید
فایل demo.txt را ادیت کنید با اضافه کردن خط زیر:
Initial Content Adding more Content Adding some Content from test Branch

و سپس با دستور زیر آن را stage و commit را با دستور زیر انجام دهید:
git add demo.txt git commit -m "Test Branch Commit"

این commit در شاخه ی Test انجام شد و حالا Test branch شامل ۲ commit از master branch می شود.

برای بررسی commit  های انجام شده در test branch لاگ بگیرید:
git log


Merging یا ادغام
در حال حاضر Test Branch از Master با یک commit جلوتر است. حال قصد داریم تمامی کدهای موجود در Test Branch به Master Branch بازگردد. در این مرحله دستور git merge به کار خواهد آمد.

برای ادغام از test branch به master branch مراحل زیر را دنبال کنید:
ابتدا وارد Master Branch می شویم:
git checkout master
سپس دستور ادغام زیر را وارد می کنیم:
git merge test

پس از اجرای این دو دستور ادغام باید با موفقیت به پایان رسیده باشد و conflict وجود ندارد.

اما در پروژه های واقعی در انجام دستور ادغام با conflict مواجه می شویم. حل شدن مشکل conflict چیزی است که با تجربه به دست می اید، پس در صورتی که شما با Git بیشتر کار کنید قادر خواهید بود که conflict ها را به راحتی حل کنید.

دستور git log را وارد کنید و متوجه خواهید شد که Master هم دارای ۳ commit است.

 

مخزن ریموتی Git
تا به حال ما در حال کار کردن روی مخزن لوکال بودیم. هر توسعه دهنده ای روی مخزن لوکال خود کار خواهد کرد اما نهایتا کدهایشان را روی مخزن ریموت push خواهند کرد. زمانی که کد در مخزن ریموت وجود داشته باشد، دیگر توسعه دهندگان نیز می توانند آن را دیده و یا اینکه ویرایش کنند.

 

GitHub
در این قسمت ما از GitHub به عنوان مخزن ریموت استفاده می کنیم.
به آدرس https://github.com/ رفته و یک حساب کاربری بسازید.
بعد از ثبت نام در صفحه اصلی GitHub روی گزینه Start a Project برای ساختن مخزن Git کلیک کنید. به مخزن یک اسم داده و روی Create Repository کلیک کنید.
برای مخزن اسم مقابل را قرار دهید: git-blog-demo
با انجام این مرحله یک مخزن ریموت برای GitHub می سازید، و وقتی مخزن را باز می کنید یک صفحه مانند عکس زیر به شما نمایش داده خواهد شد.
 


repository url متنی است که در بالا هایلایت شده است:
https://github.com/aditya-sridhar/git-blog-demo.git
برای نشان دادن مخزن ریموت به مخزن لوکال از دستور زیر استفاده کنید:
git remote add origin [repository url]

GitPush
برای push کردن تمام کدها از روی مخزن لوکال به مخزن ریموت از دستور زیر استفاده کنید:
git push -u origin master

این دستور کد را از master branch به مخزن لوکال روی master branch در مخزن ریموت می فرستد.


دستورات جانبی

Git Pull
از git pull برای pull کردن یا دریافت آخرین تغییرات از روی مخزن ریموت به مخزن لوکال استفاده می شود. کدهای مخزن ریموت توسط توسعه دهندگان متفاوت در هر لحظه در حال آپدیت شدن است، از این رو git pull بسیار واجب است.
git pull origin master

Git Clone
این دستور زمانی استفاده می شود که از یک مخزن ریموتی قصد clone گرفتن روی کامپیوتر خودمان را داشته باشیم.
دستور به صورت زیر است:
git clone [repository url]

در این مقاله سعی شده اصول اولیه آشنایی با دستورات گیت گنجانده شود، شما میتوانید از گیت هاب استفاده کنید یا با استفاده از یک سرور مجازی و gitlab نسخه self host و گیت سرور شخصی خود را داشته باشید.