راهنمای گیت

by iman

gitگیت (به انگلیسی: Git) یک نرم‌افزار آزاد و متن‌باز برای مدیریت کد منبع توزیع شده است که هدف اصلی آن سرعت است. گیت ابتدا برای توسعه‌ی لینوکس توسط لینوس تروالدز به وجود آمد. هر مخزن گیت دارای تاریخچه‌ی کامل تغییرات است و برای کار با آن نیازی به دسترسی به شبکه یا سرور مرکزی وجود ندارد.

تاریخچه Git :

تا قبل از ۲۰۰۲ برای گسترش کرنل از هیچ نرم‌افزار کنترل نسخه استفاده نمی‌شد و هر فردی که در گسترش کرنل نقش داشت به شکل خصوصی از نرم‌افزار‌هایی مانتد SVN/CVS استفاده می‌کرد و دلیلش آن بود که هیچ کدام از نرم‌افزارهای کنترل نسخه این توانایی نداشتند که حجم تغییراتی که در لینوکس اتفاق می‌افتاد را پشتیبانی کنند. در این سال لینوس از BitKeeper به عنوان نرم‌افزار کنترل نسخه رسمی لینوکس استفاده کرد که به گسترش دهنده‌های کرنل (هر پروژه‌ی متن باز) اجازه می‌داد به صورت رایگان از BitKeeper استفاده کنند.

در سال ۲۰۰۵ اجازه‌ی استفاده رایگان از Bitkeeper برای گسترش دهندگان لینوکس محدود شد (به دلیل انجام مهندسی معکوس روی Bitkeeper) و لینوس شروع به جست‌و‌جو برای یافتن جایگزینی مناسب کرد. اما نرم‌افزار‌ها مناسبی پیدا نکرد که بتواند حجم تغییرات لینوکس را مدیریت کنند و این کمبود سبب شد تا لینوس به فکر نوشتن یک نرم‌افزار کنترل نسخه بیفتد. توسعه گیت در ماه آوریل سال ۲۰۰۵ اغاز شد و تنها ۲ هفته بعد از شروع توسعه، گیت قادر بود شاخه‌ها (branch) را ادغام (merge) کند. ۲ ماه بعد گیت به عنوان نرم‌افزار کنترل نسخه رسمی برای گسترش لینوکس مورد استفاده قرار گرفت.

ساختار گیت

در پوشه‌ی پایه‌ی هر پروژه که با استفاده از گیت مدیریت می‌شود پوشه‌ای با نام git. (نقطه git) وجود دارد که تمامی اطلاعات مربوط به پروژه (تاریخچه، برچسب‌ها، …) را در خود نگه می‌دارد. این ساختار بر خلاف ساختار subversion است که در هر زیرشاخه یک پوشه‌ی svn. (نقطه svn) دارد. از جمله پرونده‌هایی که در پوشه‌ی git. وجود دارند، config است که تنظیمات مخزن را در خود نگه می‌دارد.

فرامین گیت :

$ git init

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

 $ git add [files]

با استفاده از این فرمان فایل های مورد نظر به مخزن محلی اضافه می گردد . مانند :

$ git add *.c

$ git add README

 $ git commit

با استفاده از این فرمان تغییرات جدید (بر روی فایل هایی که با فرمان git add به مخزن اضافه گردیده اند) به مخزن محلی افزوده شده و ذخیره می گرددند. مانند :

$ git commit -m ‘initial project version

 دریافت مخزن از مخازن موجود :

برای دریافت مخازن جدید از مخازن موجود از این فرمان استفاده می گردد.

$ git clone

برای مثال فرمان زیر مخزن جدید از سایت github دریافت و ذخیری می نماید:

 $ git clone git://github.com/schacon/grit.git

این فرمان پوشه ای با نام grit ایجاد نموده و در آن فایل های سرور را کپی نموده و در انتها فایل ها را به مخزن محلی اضافه می نماید. برای تغییر نام شاخه ذخیر شده می توان از دستور زیر استفاده نمود :

 $ git clone git://github.com/schacon/grit.git mygrit

همانطور که در فرامین بالا دیده می شود نرم افزار گیت از پروتکل git به جهت انتقال اطلاعات استفاده نموده است. این در صورتی است که می توان از پروتکل های ssh, http, ftp و … استفاده نمود. لازم به ذکر است که فرمت user@server:/path.git از پروتکل ssh استفاده می نماید.

 $ git status

این فرمان وضعیت تمامی فایل های موجود در مخزن را نشان می دهد. برای مثال :

$ git status

# On branch master

nothing to commit (working directory clean)

در مثال بالا مخزن بدون هیچگونه تغییر ذخیره نشده ای (اصطلاحا به این وضعیت clean میگویند) میباشد. معمولا وضعیت هایی مانند تغییر در فایل ها٬ حذف فایل٬ افزودن فایل و شاخه ای جدید نیاز به ذخیره سازی (commit) دارند.

 $ git log

این فرمان گزارشی از تغییرات ذخیره شده ( منظور اینجا commit ها میباشد) را نشان می دهد.

$ git log

commit ca82a6dff817ec66f44342007202690a93763949

Author: iman darabi <iman.darabi@gmail.com>

Date: Mon Mar 17 21:52:11 2013 -0700

changed the version number

commit 085bb3bcb608e1e8451d4b2432f8ecbe6306e7e7

Author: Iman Darabi <iman.darabi@gmail.com>

Date: Sat Mar 15 16:40:33 2008 -0700

$ git commit –amend

در بسیاری از موارد بر اساس اشتباه یا … بازگشت به حالت قبل و حذف تغییرات ایجاد شده ( undo ) نیاز میشود. در نرم افزار گیت در بسیاری از موارد میتوان اینکار را انجام داد ولی بعضی از موارد این فرایند ممکن نخواهد بود.

یکی از موارد بازگشت به قبل ( undo ) بعد از commit زدن به پروژه است٬ بدین صورت که ممکن است بخواهیم قبل از commit زدن فایلی به پروژه اضافه کنیم ویا اینکه تغییراتی در فایل بدهیم. بدین منظور مانند مثال زیر عمل میکنیم :

$ git commit -m ‘initial commit’

$ git add forgotten_file

$ git commit –amend

$ git checkout

در صورتی که بخواهیم تغییرات اعمال شده به فایلی را حذف نماییم و آنرا به حالت قبل بازگردانیم از این دستور استفاده می نماییم. بازگشت به حالت قبلی میتواند به آخرین commit اعمال شده ویا حتی بازگشت به زمان اینجاد مخزن محلی صورت پذیرد . بدین منظور ابتدا با استفاده از فرمان git status وضعیت فعلی را بررسی مینماییم :

$git status

# Changed but not updated:

# (use “git add <file>…” to update what will be committed)

# (use “git checkout — <file>…” to discard changes in working directory)

#

# modified: benchmarks.rb

#

خروجی این فرمان نشان می دهد که فایل benchmarks.rb تغییر یافته است٬ بنابراین جهت حذف تغییرات بر روی این فایل بدین صورت استفاده می نماییم :

$ git checkout — benchmarks.rb

$ git status

# On branch master

# Changes to be committed:

# (use “git reset HEAD <file>…” to unstage)

#

# modified: README.txt

#

باید توجه داشت که این فرمان بسیار خطر ناک است٬ بعد از اجرای فرمان تغییرات بر روی فایل benchmarks.rb حذف شده و قابل بازگشت نمیباشد.

$ git remote

این فرمان مخزن اولیه ـ ای که پروژه از آن دریافت شده است ـ را نشان میدهد.

$ git remote

origin

برای دیدن آدرس url مبدا باید از پارامتر v- استفاده نمود:

$ git remote -v

origin git://github.com/schacon/ticgit.git

$ git fetch [remote-name]

این فرمان تمامی تغییراتی را که بر روی سرور اعمال گردیده و بعد از آخرین دریافت اطلاعات از سرور بر روی مخزن محلی اعمال نشده است را دریافت نموده و ذخیره می نماید .

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

$git push [remote-name] [branch-name]

در صورتیکه بخواهیم تغییرات و کدهای جدیدی که به مخزن محلی اضافه کرده ایم به سرور نیز اعمال گردد از فرمان git push استفاده می نماییم . برای مثال اگر بخواهیم تغییرات شاخه اصلی(master branch ) مخزن محلی را بر روی سرور اصلی(origin server ) اعمال نماییم از فرمان زیر استفاده می نماییم :

$ git push origin master