- تعاریف
- اسم های خاص
- ایجاد یک repository
- نحوه clone کردن یک repository
- فایل
.git - تنظیمات Git و دستور
git config - ذخیره تغییرات
- دستور
git status - دستور
git addوgit commit - دستور
git diff - دستور
git log - دستور
git blame - دستور
git tag
قبل از هرچیزی، بهتره که یسری از اسم هایی که خیلی مهم هستن رو براتون تعریف کنم و هرکدوم رو خیلی آسون توضیح بدم.
1 - تعریف repository : مجموعه ای از کامیت هاست.
2 - تعریف staging area : جایگاه تغییرات اعمال نشده.
3 - تعریف working tree : خود همون پروژه ای که داریم روش کار میکنیم.
4 - تعریف commit : وقتی یک تغییری روی پروژه مون اعمال میکنیم، یک پیامی برای این تغییر مینویسیم، این پیام commit نام دارد.
5 - تعریف branch : یک شاخه ای از ریپازیتوری.
6 - تعریف tag : اسمی هست که به یک commit میدهیم
اگه تا الآن براتون گنگ و گیج کننده بود، اشکالی نداره و کاملا طبعیه، جلوتر بیشتر این مطالب براتون جا میوفته!
تعریف master : برنچ اصلی یک ریپوزیتوری master است
تعریف HEAD : آخرین کامنت
تعریف origin : یه موقعی هست که ما یک ریپوزیتوری رو از اینترنت خوشمون میاد و اونو clone میکنیم، به جایی که ازش این ریپوزیتوری رو clone کردیم origin میگن! (اگه مفهوم clon رو نمیدونید نگران نباشید، جلوتر بهش میپردازیم)
در لینوکس ابتدا به Desktop میریم و با استفاده از دستور mkdir یک دایرکتوری ای درست میکنیم
سپس با دستور cd به داخل دایرکتوری رفته و دستور git init رو وارد میکنیم تا پوشه مورد نظر تبدیل به یک repository شود.
در همین شرایط یک فایلی تحت عنوان git. دیده میشود که در ادامه به آن میپردازیم.
خیلی وقت ها پیش میاد که شما در گیت هاب در حال گشت هستی تا اینکه از یک ریپوزیتوری خوشت میاد و ایده های زیادی براش داری و میخوایی این ایده ها رو روش پیاده سازی کنی. در ابتدا باید اون ریپازیتوری رو برای خودت clone کنی
برای clone کردن یک ریپازیتوری از دستور git clone + link استفاده میکنیم.
git clone [email protected]:saed-gpr/linux.git
میتونیم هم لینک https و هم لینک ssh رو وارد کنیم.
در بعضی از شرایط، ما فقط یک بخشی از یک repository را میخواهیم داشته باشیم. برای اینکه فقط یک شاخه از یک repositoyr رو دانلود کنیم، از دستور زیر استفاده میکنیم:
git clone --master [email protected]:saed-gpr/linux.git
در این مثال آورده شده، ما برنج master از این پروژه را clone کردیم (شما الآن با مفهوم clone آشنا هستید)
بعد از انجام مراحل قبل، یک دایرکتوری پنهان به اسم git. تشکیل میشود. اما کارایی این دایرکتوری چیه؟
دایرکتوری git. درواقع یک مخزن برای ذخیره سازی یک سری از اطلاعات مانند netadata ها، تاریخچه ها و configuration ها میباشد.
توی دنیای Git برای اینکه نشون بدیم که یک تغییر یا commit توسط ما نوشته شده است، باید یک سری چیز ها رو مثه user name و user email رو مشخص کنیم.
برای این کار از دستور زیر استفاده میکنیم.
git config --global user.name "saed-gpr"
برای ست کردن username
git config --global user.email "[email protected]"
برای ست کردن email
با توجه به المان هایی که در تصویر مشاهده میشود، ما در پروژه هامون سه حالت داریم :
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"
با استفاده از این دستور، میتونید وضعیت پروژه تونو ببینید. اینکه ایا untracked هست یا نه یا توی چه مرحله ای قرار داره. (الان دیگه مفهوم untracked رو staging area رو میدونید)
همونطور که پیشتر دیدید، دستور git add دستوری است که فایل رو به حالت Staging Area منتقل میکنه(آماده ی commit کردن میکنه) و میتونیم با استفاده از دستور git commit اون تغییرات رو ذخیره کنیم.
وقتی شما یک تغییری رو روی فایل یا پروژه اعمال کردید، برای ذخیره شدن این تغییر از این دستور استفاده میکنیم. اما این دستور دارای المان m- میباشد که این امکان رو به ما میده که برای هر تغییراتی یک پیامی بذاریم.(پیام ها داخل دابل کوتیشن " " قرار میگیرند)
فرض کنید که پروژه شما با یک باگی روبرو شده است و شما و تعدادی از همکارانتان درحال تلاش برای رفع این باگ هستید که بلخره شما این باگ رو برطرف میکنید. برای اینکه دیگر همکاران شما متوجه این بشوند که باگ برطرف شده، نیازه که شما یک پیامی رو ذخیره سازی کنید. حالا با در نظر گرفتن این سناریو دستور به صورت زیر میشود
git commit -m "The bug has been fixed"
در اینجا قسمت "The bug has been fixed" مربوط به همون پیام میباشد. شما باتوجه به کاری که کردید، میتونید این پیام رو بنویسید.
این دستور تغییرات اعمال شده و تفاوت بین فایلی که الآن وجود داره با فایلی که قبل از ادیت کردن وجود داشت رو نشون میده.
به صورت کلی، میشه این دستور را به دو صورت نوشت و فرق چندان خاصی ندارن.
روش اول :
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 را به نمایش در اوردیم.
برای نشون دادن لاگ تغییرات با توجه به commit ها.
1 - به صورت git log : لاگ ها رو تمام و کمال نشون میده
2 - به صورت git log --oneline : لاگ ها رو به صورت خلاصه نشون میده
درواقع وقتی که یک پروژه خیلی بزرگ به همراه تعداد خیلی زیادی commit داری، بهتره از این دستور استفاده کنی !
این دستور تغییرات یک فایل خاص رو با جزئیات بررسی میکند. فرم کلی این دستور هم به صورت git blame + file name میباشد.
به عنوان مثال، یک فایلی در پروژه ما وجود داره که اسمش main.txt هست و میخواهیم تغییرات این فایل رو در طول زمان به همراه نام نویسنده اش را ببینیم. به صورت زیر عمل میکنیم :
git balme main.txt
این دستور باعث میشه که commit های پروژه مونو راحت تر بخونیم.
روش استفاده :
git tag "V1.0"
برای دیدن همه تگ ها :
git tag
همجنین میتونیم برای یک کامیت خاصی در پروژه، tag اضافه کنیم
git tag "V0.8" 20eb643
در واقع 20eb643 به یک کامیت مشخص در پروژه مون اشاره میکنه و میتونه هرچی باشه.
- Author : saed gholipour
