نصب Git روی سیستم‌عامل اوبونتو

با مراجعه به وب‌سایت رسمی Git، بسته به نوع سیستم‌عامل خود می‌توان اقدام به دریافت فایل‌های دانلود نمود اما این آموزش مبتنی بر سیستم‌عامل گنو/لینوکس توزیع اوبونتو است و طبیعتاً در این بخش صرفاً نحوهٔ نصب روی این پلتفرم را آموزش خواهیم داد. اساساً نصب گیت روی اوبونتو بسیار ساده است به طوری که با استفاده از کامند زیر می‌توان این کار را عملی ساخت:

$ sudo apt-get install git

پس از موفقیت‌آمیز بودن پروسهٔ‌ نصب،‌ با استفاده از کامند زیر می‌توان نسخهٔ نصبی را مشاهده کرد:

$ git --version 
git version 2.17.1

در این مرحله از کار گیت به درستی روی سیستم نصب شده و اکنون می‌توانیم یک سری تنظیمات اولیه را انجام دهیم.

راهنمای کانفیگ کردن Git

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

$ git config --global user.name "Behzad"

در توضیح کامند فوق می‌توان گفت که ابتدا دستور git config را نوشته سپس از آپشن global-- استفاده کرده‌ایم بدان معنا که تنظیمات فوق در سراسر سیستم اِعمال خواهد شد سپس داخل علائم "" نام خود را درج نموده و اینتر می‌‌کنیم. در ادامه، همان‌طور که ملاحظه می‌شود ایمیل خود را نیز به گیت معرفی کرده‌ایم:

$ git config --global user.email "my.email.address@gmail.com"

حال برای اطمینان حاصل کردن از درست کانفیگ شدن نام و ایمیل، دستورات زیر را اجرا می‌‌کنیم:

$ git config user.name
Behzad
$ git config user.email
my.email.address@gmail.com

می‌بینیم که نام و ایمیل به درستی سِت شده‌اند و از این پس هر کامیتی که انجام دهیم، با این مشخصات در سیستم ثبت خواهد شد.

ساخت اولین پروژه با استفاده از Git

در این مرحله از آموزش، به منظور درک عملی کامندهای مختلف گیت، نیاز است تا پروژه‌ای واقعی ساخته و شروع به تمرین روی آن نماییم که برای همین منظور، در سیستم‌عامل اوبونتو با استفاده از کامند زیر پروژه‌ای با نامی دلخواه همچون git-tutorial در مسیر var/www/ یا هر مسیر دلخواه دیگری می‌سازیم:

$ mkdir /var/www/git-tutorial

mkdir ارتباطی با گیت نداشته بلکه کامندی به منظور ساخت یک پوشهٔ جدید در لینوکس است با این توضیح که دستور داده‌ایم تا در مسیر var/www/ پوشهٔ جدیدی تحت عنوان git-tutorial ساخته شود. پس از ورودی به این پوشه با استفاده از دستور cd، با استفاده از کامند زیر سیستم کنترل نسخهٔ گیت را فعال می‌سازیم:

var/www/git-tutorial$ git init

کامند init برگرفته از کلمهٔ Initialize به معنی «شروع کردن» است. پس از اجرای موفقیت‌آمیز این کامند،‌ پوشه‌ای تحت عنوان git. ساخته می‌شود اما اگر نگاهی به محتویات پروژهٔ git-tutorial بیندازیم، مسلماً چیزی مشاهده نخواهد شد چرا که در سیستم‌عامل گنو/لینوکس فایل‌هایی که با علامت . نام‌گذاری شده‌اند نمایش داده نمی‌شوند و مخفی هستند که برای نمایش آن‌ها می‌توان از کلیدهای ترکیبی Ctrl + H استفاده نمود که در این صورت خواهیم داشت:

git-tutorial
└── .git

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

/var/www/git-tutorial$ git status
On branch master

No commits yet

nothing to commit (create/copy files and use "git add" to track)

همان‌طور که مشخص است، خط اول حاکی از آن می‌باشد که روی شاخهٔ مَستر قرار داریم که شاخهٔ پیش‌فرض و اصلی هر ریپازیتوری می‌باشد و در عین حال هیچ گونه کامیتی نیز تاکنون صورت نگرفته است. فرض کنیم که قرار است در این پروژه یک صفحهٔ سادهٔ اچ‌تی‌ام‌ال طراحی کنیم. برای این منظور، با استفاده از کامند زیر فایلی تحت عنوان index.html می‌سازیم:

/var/www/git-tutorial$ touch index.html

در لینوکس،‌ touch به منظور ساخت یک فایل جدید مورد استفاده قرار می‌‌گیرد به طوری که اگر مجدد نگاهی به محتویات این پروژه بیندازیم، خواهیم داشت:

git-tutorial
├── .git
└── index.html

اکنون با استفاده از ادیتور دلخواه خود، یک صفحهٔ سادهٔ اچ‌تی‌ام‌ال داخل فایل index.html به صورت زیر می‌سازیم:

<!DOCTYPE html>
<html>

<head>
    <title>Sokan Academy Git Tutorial</title>
</head>

<body>
    <h1>This is a Git tutorial</h1>
    <p>In this course, we`re learn the basics the Git</p>
</body>

</html>

حال مجدد دستور git status را اجرا می‌‌کنیم به طوری که در خروجی خواهیم داشت:

/var/www/git-tutorial$ git status
On branch master

No commits yet

Untracked files:
  (use "git add <file>..." to include in what will be committed)

        index.html

nothing added to commit but untracked files present (use "git add" to track)

نسبت به دفعه‌ٔ اولی که این کامند را اجرا کردیم، بخش جدیدی تحت عنوان Utracked files اضافه شده و دقیقاً نام فایل جدیدی که ساختیم در این بخش آمده است. پیش از این با مفهوم اِستیج آشنا شدیم با این توضیح که پروسهٔ نسخه‌بندی در این فاز آغاز شده و فایل‌ها آمادهٔ ثبت در تاریخچهٔ پروژه می‌شوند که برای این منظور می‌باید دستور زیر را اجرا نماییم:

/var/www/git-tutorial$ git add index.html 

همان‌طور که ملاحظه می‌شود، کلیهٔ‌ کامندهای گیت با دستور git آغاز می‌شوند و برای مرحلهٔ اِستیج از دستور add استفاده کرده و فایلی که قصد داریم در هیستوری ذخیره گردد را نوشته‌ایم و چنانچه اکنون مجدد وضعیت گیت را چک کنیم،‌ به عنوان خروجی خواهیم داشت:

/var/www/git-tutorial$ git status
On branch master

No commits yet

Changes to be committed:
  (use "git rm --cached <file>..." to unstage)

        new file:   index.html

می‌بینیم که بخشی تحت عنوان Changes to be commited در معرض دیدمان قرار می‌گیرد بدان معنا که با استفاده از دستور add تغییرات آمادهٔ ذخیره‌سازی شده‌اند اما این کار هنوز صورت نگرفته است که برای این منظور، با استفاده از دستور commit این کار را به صورت زیر عملی خواهیم ساخت:

/var/www/git-tutorial$ git commit -m "My First Commit"
[master (root-commit) bced368] My First Commit
 1 file changed, 13 insertions(+)
 create mode 100644 index.html

دستور commit یک آپشن اختیاری می‌گیرد تحت عنوان m- که برگرفته از واژهٔ Message به معنی «پیام» است و همان‌طور که ملاحظه می‌شود، داخل علائم "" پیامی دلخواه نوشته‌ و دکمهٔ اینتر را می‌زنیم و در خروجی این دستور زیر می‌بینیم که آمده یک فایل تغییر یافته و از آنجا که داخل این فایل سیزده خط کد نوشته‌ایم، تعداد خطوط کد هم درج شده است. اکنون اگر مجدد وضعیت را چک کنیم خواهیم داشت:

/var/www/git-tutorial$ git status
On branch master
nothing to commit, working tree clean

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

در متنی که داخل تگ‌های <p></p> نوشتیم، یک اِشکال گرامری وجود دارد به طوری که کلمهٔ learn می‌باید به learning تغییر یابد که برای همین منظور، محتویات این فایل را به صورت زیر تغییر خواهیم داد:

<!DOCTYPE html>
<html>

<head>
    <title>Sokan Academy Git Tutorial</title>
</head>

<body>
    <h1>This is a Git tutorial</h1>
    <p>In this course, we`re learning the basics the Git</p>
</body>

</html>

حال اگر وضعیت گیت را چک کنیم خواهیم دید:

/var/www/git-tutorial$ git status
On branch master
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

        modified:   index.html

no changes added to commit (use "git add" and/or "git commit -a")

می‌بینیم که در بخشی تحت عنوان Changes not staged for commit آمده که یک سری تغییرات صورت گرفته که هنوز کامیت نشده‌اند که برای این منظور، دستور زیر را اجرا می‌کنیم:

/var/www/git-tutorial$ git commit 
On branch master
Changes not staged for commit:
	modified:   index.html

no changes added to commit

در واقع از آنجا که پروسهٔ اِستیجینگ سهواً از قلم افتاده است، می‌بینیم که عنوان Changes not staged for commit حاکی از آن است که تغییرات آمادهٔ کامیت شدن نیستند و برای رفع این مشکل، ابتدا کامند add را به صورت زیر اجرا می‌‌کنیم:

/var/www/git-tutorial$ git add index.html 

حال مجدد دستور git commit را اجرا کرده با این تفاوت که برخلاف گذشته، جهت تست آپشن یا سوئیچ m- را حذف کرده‌ایم:

GNU nano 2.9.3      /var/www/git-tutorial/.git/COMMIT_EDITMSG                 
I fixed the typo

# Please enter the commit message for your changes. Lines starting
# with '#' will be ignored, and an empty message aborts the commit.
#
# On branch master
# Changes to be committed:
#       modified:   index.html
#

می‌بینیم که درج یک پیام برای تک‌تک کامیت‌ها در گیت الزامی است و چنانچه فراموش کنیم این کار را انجام دهیم، این ابزار به صورت خودکار ادیتور پیش‌فرض سیستم‌عامل که در مثال فوق nano است را باز کرده و ما هم پیامی همچون I fixed the typo را وارد نموده و در نهایت با فشردن دکمه‌های ترکیبی Ctrl + X سپس دکمهٔ Y تغییرات را ذخیره نموده و پروسهٔ‌ کامیت را تکمیل می‌‌کنیم و در صورتی که دستور git status را مجدد اجرا نماییم، می‌بینیم که هیچ گونه کامیت انجام‌نشده‌ای نداریم و تغییرات جدید نیز ذخیره شده‌اند. حال فرض کنیم بنا به هر دلیلی، این فایل به صورت زیر تغییر می‌یابد:

<!DOCTYPE html>
<html>

<head 
fsdfsf
fsdfsf
fs
s
dfs

f
sdf s
df 
sdf
s
fd"

در چنین شرایطی به سادگی می‌توانیم به یکی از قابلیت‌های کلیدی گیت که چیزی نیست جز بک‌آپ‌گیری رجوع کرده و مجدد این فایل را اصلاح نماییم:

/var/www/git-tutorial$ git checkout -- .

اگر مجدد محتویات فایل index.html را ملاحظه کنیم، خواهیم داشت:

<!DOCTYPE html>
<html>

<head>
    <title>Sokan Academy Git Tutorial</title>
</head>

<body>
    <h1>This is a Git tutorial</h1>
    <p>In this course, we`re learning the basics the Git</p>
</body>

</html>

می‌بینیم آخرین کامیتی که انجام داده‌ بودیم را بازگردانده و فایل کامل را در دسترس داریم. همچنین برای این که به لیستی کامیت‌هایی که تاکنون انجام داده‌ایم دست یابیم، می‌توانیم از دستور log به صورت زیر استفاده کنیم:

/var/www/git-tutorial$ git log
commit 624fe7dec223591fde44c9c0578783101f4126ca (HEAD -> master)
Author: Behzad <my.email.address@gmail.com>
Date:   Sat Jun 15 12:47:27 2019 +0430

    I fixed the typo

commit bced3684678bf893ef111f92837ef198d7fb59b5
Author: Behzad <my.email.address@gmail.com>
Date:   Sat Jun 15 12:35:59 2019 +0430

    My First Commit

می‌بینیم لیستی از دو کامیتی که تاکنون انجام داده‌ایم در معرض دیدمان قرار گرفته و هر کامیت نیز از یک کد هَش به منظور شناسایی برخوردار است (چنانچه تعداد کامیت‌ها زیاد بوده و بخواهیم گزارشی خلاصه دریافت کنیم، می‌توانیم از دستور git log --oneline استفاده نماییم.) به طور مثال،‌ اگر بخواهیم به وضعیتی که واژهٔ‌ learning را سهواً به صورت learn نوشته بودیم بازگردیم، می‌توانیم کامند زیر را اجرا کنیم:

/var/www/git-tutorial$ git checkout bced3684678bf893ef111f92837ef198d7fb59b5
Previous HEAD position was 624fe7d I fixed the typo
HEAD is now at bced368 My First Commit

و از این پس محتویات فایل مذکور به صورت زیر خواهد بود:

<!DOCTYPE html>
<html>

<head>
    <title>Sokan Academy Git Tutorial</title>
</head>

<body>
    <h1>This is a Git tutorial</h1>
    <p>In this course, we`re learn the basics the Git</p>
</body>

</html>

در واقع،‌ در تفسیر کامند فوق می‌توان گفت که با نوشتن کامند git checkout و درج کد هَش مرتبط با کامیتی که مد نظر داریم، به همان نسخه‌ای که در هیستوری پیش از این ثبت شده است باز خواهیم گشت.

جمع‌بندی
اساساً شروع کار با گیت چندان دشوار نیست چرا که با فراگیری کامندهای add و commit می‌توان پایه‌ای‌ترین کار در گیت که چیزی نیست جز وارد کردن تغییرات در اصطلاحاً Staging Area سپس ثبت تغییرات در پوشهٔ git. را عملی ساخت.

نظرات
اگر login نکردی برامون ایمیلت رو بنویس: