آموزش Git - ساعد قلی پور | Saed Gholipour
ساعد قلی پور | saedgholipour

ساعد قلی پور | Saed Gholipour

آموزش Git

تصویر گیت هاب

آموزش کنترل ورژن با Git

سیستم Git چیه؟

درواقع Git یک سیستمی هست که برنامه نویس ها با این سیستم میتونن به راحتی با هم تعامل کنن و به صورت گروهی روی یک پروژه کار کنن و آپدیت ها رو دسته بندی کنن.

تصویر گیت هاب

چیز هایی که توی این مطلب گفتیم:

  • تعاریف
  • اسم های خاص
  • ایجاد یک repository
  • نحوه clone کردن یک repository
  • فایل .git
  • تنظیمات Git و git config
  • ذخیره تغییرات
  • git status
  • git add و git commit
  • git diff
  • git log
  • git blame
  • git tag
  • git commit --amend
  • git clean
  • git revert
  • git reset
  • git rm
  • پابلیک کردن repository

تعاریف :

قبل از هرچیزی، بهتره که یسری از اسم هایی که خیلی مهم هستن رو براتون تعریف کنم و هرکدوم رو خیلی آسون توضیح بدم.

1 – repository : مجموعه ای از کامیت هاست.

2 – staging area : جایگاه تغییرات اعمال نشده.

3 –  working tree : خود همون پروژه ای که داریم روش کار میکنیم.

4 – commit : وقتی یک تغییری روی پروژه مون اعمال میکنیم، یک پیامی برای این تغییر مینویسیم، این پیام commit نام دارد.

5 – branch : یک شاخه ای از ریپازیتوری.

6 – tag : اسمی هست که به یک commit میدهیم

اگه تا الآن براتون گنگ و گیج کننده بود، اشکالی نداره و کاملا طبعیه، جلوتر بیشتر این مطالب براتون جا میوفته!


اسم های خاص :

master : برنچ اصلی یک ریپوزیتوری master است

HEAD : آخرین کامنت

origin : یه موقعی هست که ما یک ریپوزیتوری رو از اینترنت خوشمون میاد و اونو clone میکنیم، به جایی که ازش این ریپوزیتوری رو clone کردیم origin میگن! (اگه مفهوم clon رو نمیدونید نگران نباشید، جلوتر بهش میپردازیم)


ایجاد یک repository

 

در لینوکس ابتدا به Desktop میریم و با استفاده از دستور mkdir یک دایرکتوری ای درست میکنیم

سپس با دستور cd به داخل دایرکتوری رفته و دستور git init رو وارد میکنیم تا پوشه مورد نظر تبدیل به یک repository شود.

در همین شرایط یک فایلی تحت عنوان git. دیده میشود که در ادامه به آن میپردازیم.


نحوه clone کردن یک repository

 

خیلی وقت ها پیش میاد که شما در گیت هاب در حال گشت هستی تا اینکه از یک ریپوزیتوری خوشت میاد و ایده های زیادی براش داری و میخوایی این ایده ها رو روش پیاده سازی کنی. در ابتدا باید اون ریپازیتوری رو برای خودت clone کنی

برای clone کردن یک ریپازیتوری از دستور git clone + link استفاده میکنیم.

git clone git@github.com:saed-gpr/linux.git

میتونیم هم لینک https و هم لینک ssh رو وارد کنیم.

در بعضی از شرایط، ما فقط یک بخشی از یک repository را میخواهیم داشته باشیم. برای اینکه فقط یک شاخه از یک repositoyr رو دانلود کنیم، از دستور زیر استفاده میکنیم:

git clone --master git@github.com:saed-gpr/linux.git

در این مثال آورده شده، ما برنج master از این پروژه را clone کردیم (شما الآن با مفهوم clone آشنا هستید)


فایل git.

 

بعد از انجام مراحل قبل، یک دایرکتوری پنهان به اسم git. تشکیل میشود. اما کارایی این دایرکتوری چیه؟

دایرکتوری git. درواقع یک مخزن برای ذخیره سازی یک سری از اطلاعات مانند netadata ها، تاریخچه ها و configuration ها میباشد.


تنظیمات Git و git config

 

توی دنیای Git برای اینکه نشون بدیم که یک تغییر یا commit توسط ما نوشته شده است، باید یک سری چیز ها رو مثه user name و user email رو مشخص کنیم.

برای این کار از دستور زیر استفاده میکنیم.

git config --global user.name "saed-gpr"

برای ست کردن username

git config --global user.email "saedgholipour81@gmail.com"

برای ست کردن email


ذخیره تغییرات

ذخیره سازی در Git

عکس مربوط به ذخیرات در Git

 

با توجه به المان هایی که در تصویر مشاهده میشود، ما در پروژه هامون سه حالت داریم :

1 – Untracked : شما یک شرایطی را درنظر داشته باشید که یک فایل به پروژه مان اضافه نشده، به این حالت Untracked میگویند. که میتوانیم با دستور git add آن را به Staging Area انتقال بدهیم.

2 – Unmodified یا Staging Area : حالتی است که فایل ها نه ادیت شدن و نه حذف یا اضافه.

3 – modified : اگر ما یک بخشی از فایل را (مثلا یک خط) تغییر بدهیم، درواقع فایل به حالت modified در اومده و مثه حالت اول میتونی با استفاده از دستوری git add به حالت Staging Area منتقلش کنیم. (بعدا بیشتر درمورد دستور git add صحبت میکنیم!)

4 – Local Repository : بعد از تغییراتی که اعمال کردیم (اضافه/حذف فایل یا تغییرات کوچیک در محتوای فایل) و اجرا دستور git add حالا نوبت commit کردن میباشد! (دیگه الآن میدونیم commit چیه!)

git add file.txt
git commit -m "this is the massage"


git status

 

با استفاده از این دستور، میتونید وضعیت پروژه تونو ببینید. اینکه ایا untracked هست یا نه یا توی چه مرحله ای قرار داره. (الان دیگه مفهوم untracked رو staging area رو میدونید)


git add و git commit

 

همونطور که پیشتر دیدید، دستور git add دستوری است که فایل رو به حالت Staging Area منتقل میکنه(آماده ی commit کردن میکنه) و میتونیم با استفاده از دستور git commit اون تغییرات رو ذخیره کنیم.

ساز و کار دستور git commit :

 

وقتی شما یک تغییری رو روی فایل یا پروژه اعمال کردید، برای ذخیره شدن این تغییر از این دستور استفاده میکنیم. اما این دستور دارای المان m- میباشد که این امکان رو به ما میده که برای هر تغییراتی یک پیامی بذاریم.(پیام ها داخل دابل کوتیشن " " قرار میگیرند)

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

git commit -m "The bug has been fixed"

در اینجا قسمت "The bug has been fixed" مربوط به همون پیام میباشد. شما باتوجه به کاری که کردید، میتونید این پیام رو بنویسید.


git diff

 

این دستور تغییرات اعمال شده و تفاوت بین فایلی که الآن وجود داره با فایلی که قبل از ادیت کردن وجود داشت رو نشون میده.

ساز و کار دستور git diff

 

به صورت کلی، میشه این دستور را به دو صورت نوشت و فرق چندان خاصی ندارن.

روش اول :

git diff

روش دوم :

git diff HEAD

الآن ما میدونیم منظور از HEAD چیه !

بیاید یکم آپشن های اضافه تری از این دستور رو مشخص کنیم.

 

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

^git diff HEAD

ولی اگه بخواهیم تقاوت رو نسبت به کامیت های خیلی قبل تر (3 یا 4 تا) به صورت زیر دستور را وارد میکنیم.

git diff HEAD~3
git diff HEAD~4

همچنین میتونیم این تفاوت ها رو در یک فایل مشخص به نمایش در بیاریم.

git diff HEAD~5 main.txt

با توجه به این دستور، ما تفاوت کامیت HEAD رو با 5 تا کامیت قبلی مخصوص فایل main.txt را به نمایش در اوردیم.


git log

 

برای نشون دادن لاگ تغییرات با توجه به commit ها.

روش های مختلف برای استفاده :

 

1 – به صورت git log : لاگ ها رو تمام و کمال نشون میده

2 – به صورت git log --oneline : لاگ ها رو به صورت خلاصه نشون میده

درواقع وقتی که یک پروژه خیلی بزرگ به همراه تعداد خیلی زیادی commit داری، بهتره از این دستور استفاده کنی !


git blame

 

این دستور تغییرات یک فایل خاص رو با جزئیات بررسی میکند. فرم کلی این دستور هم به صورت git blame + file name میباشد.

به عنوان مثال، یک فایلی در پروژه ما وجود داره که اسمش main.txt هست و میخواهیم تغییرات این فایل رو در طول زمان به همراه نام نویسنده اش را ببینیم. به صورت زیر عمل میکنیم :

git blame main.txt


git tag

 

این دستور باعث میشه که commit های پروژه مونو راحت تر بخونیم.

روش استفاده :

git tag "V1.0"

برای دیدن همه تگ ها :

git tag

همجنین میتونیم برای یک کامیت خاصی در پروژه، tag اضافه کنیم

git tag "V0.8" 20eb643

در واقع 20eb643 به یک کامیت مشخص در پروژه مون اشاره میکنه و میتونه هرچی باشه.


git commit --amend

 

از این دستور برای تغییر پیام اخرین commit پروژه مون استفاده میکنیم. نحوه استفاده اش به صورت زیر میباشذ:

git commit --amend -m "this is the new message"

git clean

 

از این دستور برای پاک کردن فایل های untracked و فایل های مربوط به ignore. استفاده میکنیم.

سه حالت کلی برای clear کردن داریم :

  1. i = به معنای interactive
  2. n = به معنای dry run (پاک کردن الکی!)
  3. f = به معنای force (پاک کردن کامل)

همچنین اگر بخواهیم دایرکتوری ای هم پاک کنیم، کاراکتر d رو هم اضافه میکنیم. برای فایل های مربوط به ignore از x استفاده میکنیم.

 

git clean -n
git clean -nd
git clean -id
git clean -fd
git clean -ix

git revert

این دستور، یک commit ای ایجاد میکنه که اثر یک commit قبل رو خنثی میکنه.

 

git revert gif

شماتیک git revert

با توجه به تصویر بالا، ما یک فایلی تحت عنوان index.js داریم که در یک کامیتی به اسم ec5be اضافه شده. حالا با استفاده از دستور زیر اثرشو خنثی میکنیم.

 

 

git revert ec5be

به طور کلی، چیزی توی تاریخچه عوض نمیشه، در اصل یک کامیتی اضافه میشه که عملکرد یک کامیت خاصی رو خنثی میکنه.


git reset

این دستور، برخلاف دستور قبلی تاریخچه رو عوض میکنه. اجرای این دستور 3 حالت داره که برای ما 2 حالتش مهمه.

  • soft : فقط commit را برمیگرداند و امکان بازیابی هم دارد
  • hard : به طور کامل commit را پاک کرده و امکان بازیابی وجود ندارد

soft

git reset --soft

تصویر مربوط به دستور git reset –soft

باتوجه به تصویر بالا، همونطور که گفتیم امکان بازیابی commit های قبل وجود دارن

 

hard

git reset --hard

تصویر مربوط به git reset --hard

با توجه به شکل بالا، این دستور به طور کامل یکسری از کامیت ها رو حذف میکنه، به صورتی که امکان بازیابی وجود ندارد.


git rm

یک فایل را هم از پروژه و هم از گیت (استیج) حذف می‌کند.

git rm file.txt
git commit -m "the file has been deleted"

 


پابلیک کردن repository

خب حالا میخواهیم که یک ریپازیتوری ای رو توی پلتفرمی مثه git hub یا git lab به اشتراک بذاریم. درواقع شما git رو یاد میگیرید که بتونید با برنامه نویس های دیگه تعامل داشته باشید و با هم دیگه هم کاری کنید. برای اینکه بتونید اینکار رو کنید، باید یک اکانت git hub درست کنید.

پس از ساخت اکانت، مراحل زیر را دنبال میکنیم.

 

  • ساخت یک ریپازیتوری در git hub
  • ساخت جفت کلید public و private در سیستم:
    با استفاده از دستور ssh-keygen یک جفت کلید میسازیم. بعد از اجرا، دو تا فایل id-rsa و id-rsa.pub ایجاد میشه.
  • اضافه کردن کلید پابلیک (id-rsa.pub) به github:
    وارد فایل id-rsa.pub میشویم و محتویات ان را کپی میکنیم. سپس در github به مسیر زیر میرویم :
    .
    settings -> ssh and GPG keys -> new ssh key
    .
    حتما حواستون باشه که فقط محتوای فایل id-rsa.pub رو در این مسیر کپی کنید و محتوای فایل id-rsa رو به هیچ وجه در اختیار کسی قرار ندهید.
  • اد کردن کلید پرایوت به سیستم :
    برای این کار به مسیر خود فایل میریم و دستور ssh-add id-rsa رو میزنیم
  • ریپازیتوری ای که در github درست کردیم رو در سیستم خود clone میکنیم (الان دیگه بلدیم که چطوری clone کنیم!)

Saed

هزاران خط کد، یک هدف مشخص.

مطالب بیشتر از این نویسنده
امتیاز: 5 از 5 (1 رای)
💬

هنوز نظری ثبت نشده

اولین نفری باشید که برای این مقاله نظر می‌دهید!

✍️ ارسال نظر

ایمیل شما منتشر نخواهد شد. فیلدهای ضروری علامت‌گذاری شده‌اند *