خلاصه مطالب سرفصل گیت جهت مرور سریع

پرسیده شده
فعالیت 1197 روز پیش
دیده شده 852 بار
9

git  : یک سیستم کنترل ورژن که برای کنترل نسخه های مختلف کدهایمان و کارهای تیمی هست ومورد استفاده قرار میگیرد 

 

نکته : مفهوم  conflict یعنی به مشکل خوردن یا تداخل در کدهامون deploy به فرآنید انتشار محصول میگویند 

CI/CD  فرآیند های انتشار نرم افزار امون رو میان و برای ما به صورت اتوماتیک انجام میدهد

 

ما با استفاده از دستور نانو می توانیم یک فایل رو در  محیط گیت بش بیایم و بسازیم  همچنین با استفاده از دستور cat هم می توانیم بیایم و محتوای درون اون رو مشاهده بکنیم 

nano index.php   //   ctrl + o == save  ctrl + x  // close
cat index.php

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

حال برای اضافه کردن کد هامون به گیت باید از دستور git Add استفاده بکنیم و برای ثبت کردن اون در گیت یا کامیت کردنش باید از دستور زیر استفاده بکنیم 

git commit -m " name commit " 
git commit --amend -m "name"برای تغیر دادن نام کامیت قبلی مون اگراشتابها اسم اش رو گزاشتیم
git show id-commit
git log با استفاده از این  دستور  تمام کامیت هامون نشون میدهد

نکته : برای ثبت کردن کامیت هامون لازم هستش که قبلش بیام و گیت رو اصطلاحا config  کنیم که برای این کار از دستورات زیر استفاده میکنیم 

 git config --global user.name "your name" / git config --global user.email "your email"
 بهتر هسنش که یوزر و ایمیل گیت هاب امون رو بهش بدهیم 

git file life cycle   وضعیت فایل ها در گیت به طور کلی به دو دسته تقسیم میشود 

1- untracked   به فایل هایی که ابزار گیت ما در مورد آن ها اصلا اطلاعاتی ندارد و 

باید ی اتفاقی برای ترک شدن داشته باشد به پروژه ما اضافه نشده و رنگ قرمز دارند 

   برای رفتن به مرحله بعدی از دستور زیر استفاده میکنیم 

git add  نام فایل / برای انتخاب تمامی فایل ها دات

2- tracked گیت به وضعیت و تغیرات در داخل این فایل ها می تونه نظارت داشته باشد

فایل هایی که در وضعیت tracked هستند خودشون سه حالت می تونند داشته باشند

 

        1- stage  در نهایت هر دستوری که ما میایم و با دستور ادد اضافه میکنیم به این مرحله اضافه می شود 

        2- modified  فایل قبلی با هرگونه تغیری میاد و به این وضعیت تغیر پیدا میکند

        اگر بخاهیم این تغیرات که دوباره اضافه شدند رو دوباره به پروژه اضافه بکنیم باید ادد کنیم

        3- unmodified به گیت ما اضافه شده یا به قولی ادد شده است اما تغیر دیگه ای روی آن اعمال نشده است

        و منتظر کامیت کردن هستیم 

 

 git status  برای دیدن وضعیت کد هامون از این دستور استفاده میکنیم

 lifecycle git status  چرخه زندگی هنگامی که از این دستور استفاده میکنیم

 

1- Working Directory  در ابتدا هر کدی که بزنیم یا کاری انجام بدهیم میاد در این وضعیت قرار میگیرد

2- Stage Area  با دستور Add یا اضافه کردن کدهایمان میاد و در این مرحله Stage قرار میگیرد

3- Repository  با دستور  کامیت کردن کدهایمان را وارد مخزن می کنیم

 

Branch  یا  شاخه 

قرار میگیرد و شاخه ی توسعه برای برنامه نویسیان و  شاخه های دیگر برای تعداد برنامه نویسان دیگر  برای توسعه سعی میکنیم از شاخه ها استفاده کنیم یک شاخه اصلی یا مستر که نسخه ی دست مشتر

git branch nameBranch                      برای ساخت یک شاخه از دستور زیر استفاده میکنیم
git checkout nameBranch   برای رفتن از یک شاخه به یک شاخه دیگر از دستور زیر استفاده میکنیم
git branch -d nameBranch 
      برای حذف کردن یک شاخه میایم و از دستور زیر استفاده میکنیم

تا اینجای کار که بخایم فقط از گیت استفاده کنیم 4 تا شاخه داریم 

1- master                2- develop                   3- Feature                     4- hotfig

نکته : هنگامی که میخایم بین  شاخه های متفاوت امون در داخل پروژه بیایم و حرکت کنیم سعی شود همه ی اون ها رو

کامیت اش رو انجام بدهیم

  نکته : برای ادغام کردن شاخه هامون از دستور زیر استفاده میکنیم که در ابتدا وارد شاخه ای که میخاهیم ادغام شود می رویم و بعد با دستور زیر نام شاخه ای را که میخاهیم با آن ادغام شود رو  میایم و می نویسیم

git merge NameBranch

نکته : در همگامی که ما اومدیم و یک باگ رو خواستیم کامیت کنیم که اون باگ رو درست کردیم  از bug-fix ....  استفاده میکنیم کامیت ها باید باید معنا دار  همراه با فاصله گزاری - باشد

 

 

نکته : در رفع یک conflicts در داخل گیت  >>>>> HEAD منظور اخرین کامیت در برنچ فعلی امون هستش ===== نام برنچ تغیرات در یک برنچ دیگه هستش conflicts زمانی ایحاد می شود که ما میخاهیم معمولا merge انجام بدهیم 

 

فایل پیوست

emad ta
emad ta

18 دی 99

6
حذف شده

نکته : استفاده از دستور git diff برای مشاهده تغیرات در داخل کامیت هامون و این که با وضعیت قبلی شون چه تفاوتی دارند چه فایل هایی اضافه یا کم شده اند را نشان می دهند به طور کل از این دستور برای مقایسه کردن استفاده می شود و می توانیم تغیرات امون رو در استیج ببینیم و یا دو تا کامیت رو باهم مقایسه بکنیم

git log --oneline اطلاعات کامیت مارو دریک خط نشون بده 
git config --global color.ui auto  برای درست کردن رنگ بندی ها در داخل پروژه امان هستش

ما قبلا که از خود گیت استفاده میکردیم به صورت تیمی برای این که مدیریت امون بهتر بشه میومدیم و برای هر یک نفر از اعضای تیم امون یک شاخه درست می کردیم و در داخل آن کد هامون رو قرار میدادیم و بعد با مدیر پروژه میومد و کد های مارو با هم مرج میکرد و به شاخه اصلی اضافه میکرد که این نوع مدیریت پروژه یک سری اشکالاتی در آینده برای ما به وجود میاورد ( برای مثال Feature base نیستش و بیشتر branch base  هستش ) که بهتر هستش از git Flow استفاده کنیم 

 

git Flow  : دو تا تعریف می تونیم براش بیاریم 

 

1-  یک ایده برای مدیریت محیط توسعه هستش و مشخص میکند که چه برنچ هایی ساخته شود و این برنچ ها چگونه

باهم دیگه مرج شوند  همراه با ان کار کنند

 

2-  مجموعه راهنما هایی هستش که به توسعه دهنده ها داده می شود تا جریان توسعه نرم افزار رو و مدیریت سورس 

کد رو در حین توسعه امان به درستی پیش ببرند و یک استاندارد برای گیت هست برای مدیریت سورس و اصطلاحا یک branching Model هستش 

git flow init      برای استفاده از آن از دستور زیر استفاده میکنیم

 

در این Branching Model ما 3 نوع شاخه ( Main Branch ) به طور کلی داریم که به ترتیب توضیح می دهیم 

 

1- Branch Master  شاخه اصلی در داخل پروژه امان هستش که دست کاربرمون قرار میگیرد و آخرین نسخه نرم افزارمون در این شاخه قرار دارد

 

2- Branch develop  شاخه ای هستش که میاد و توسعه دهنده در داخل اون کدهارو توسعه می دهند و حاوی آخرین  تغیرات تیم توسعه نرم افزار هستش  و قرار هست در ریلیز بعدی پروژه اضافه بشود

 

3- Supportive Branch  شاخه هایی هستند که وقتی کارمون با آن ها تمام شد میایم و اون هارو حذف میکنیم این شاخه به طور کلی به 3 تا زیر شاخه تقسیم می شوند

 

         1- Feature Branch زمانیکه میخاهیم امکان خواستی را به پروژه بسازیم ولی نمیخاهیم شاخه ای را بسازیم و به

         محض اینکه تمام شد اون رو می بندیم و ادغامش میکنیم با نسخه توسعه امون و یک انشعاب از شاخه توسعه

         هستش 

 برای درست کردن یک شاخه برنچ فیچر از دستور زیر برای شروع و پایان استفاده میکنیم
 
 git flow feature start name-Feature
  
 git flow feature finish name-Feature

        2- Release Branches شاخه هایی هستند که حاوی تعداد زیادی فیچر برنچ هستند مثال ممکن است ما یک             نسخه از نرم افزار رو بیایم و انجام بدهیم درحالی که شش تا امکان جدید میخاهیم بهش اضافه بکنیم خوب این

        جا میاد و شش تا فیچر برنچ ایجاد می شود و زمانی که اون ها اومدن و کامل تکمیل شدن همه ی اون ها میان

        و ادغام می شوند داخل این Release Branch که این شاخه رو معمولا یک توسعه دهنده ارشد درست میکند و             اون برنچی هستش  که قرار هست به عنوان نسخه بعدی نرم افزار ارائه بشود در واقع همه ی فیچر برنچ هامون

        بعد تکمیل شدن میان و در این شاخه ادغام می شوند و این شاخه میاد و ادغام می شود با برنچ هایتوسعه و               مسترمون و این شاخه می رسد به دست بچه های واحد QA

 git flow release start name-Feature ==>'0,1,0'
 git flow release finish name-Feature ==>'0,1,0'

         3- HotFix Branches زمانی که نسخه ای که منتشر کردیم ازش یک اتفاقی می افتد نیاز به یک ادغام اورژانسی            هست مثلا یک باگ امنیتی یا یک ارور500 داشتیم که واجب بود که برای رفع اون میایم و یک برنچ هات درست

         میکنیم که بعد از رفع اون میایم و با مستر ودولوپ امون ادغامش میکنیم       

git flow hotfix start hotfix-Feature 
git flow hotfix finish hotfix-Feature

نکته : سه تا برنچ قبلی به محض این که کارمون باهاشون تموم شد میایم و حذفشون میکنیم یک تگ یا ورژن بندی می کنیم نرم افزار امون که برای برگشت هستش 

 

 

نکته : یک موقع هست ما یکسری از تغیرات را اشتباهی با دستور ادد وارد استیج کرده ایم حال برای این که این تغیرات

این تغیرات را از داخل استیج برنامه امان را حذف کنیم از دستورات زیر استفاده میکنیم

git rm --cached nameFile
git rm -cached -r .   حدف به کلی 

 

git stash : بعضی مواقع هستش ما داخل یک فیچر یا برنچی داریم کار میکنیم یک کار اورژانسی پیش میاد و ما     باید به یک برنچ دیگه بریم و ما نمیتوانیم نیمه کاره اون رو رها کنیم و به یک جا نیاز داریم تا بیایم و اون رو موقتا ذخیره کنیم تا وقتی کارمون تموم شد بیایم و اون کارو انجام بدهیم چون اگر همین کارو نکنیم و سوییچ کنیم تمام تغیراتمون وارد اون شاخه امون می شود گرچه توصیه می شود قبل از این که ما بیایم و از یک شاخه به شاخه ای دیگه برویم  اول کامیت کنیم حالا ما شرایطی داریم که پروژه به جایی نرسیده که بخایم و کامیت  کنیم  در اینجا  توصیه  می شود  که بیایم  و از stash استفاده بکنیم برای همین در داخل پروژه  در  ابتدا میایم و با دستور git add فایل هامونو  می بریم داخل stage برنامه ولی این کار رو هم نمیخاهیم انجام بدهیم برای همین از stash ها میایم و استفاده میکنیم

برای این کار کافی است که  از دستور git stash استفاده بکنیم با استفاده از این دستور تغیرات امون رو وارد این حافظه موقت میکنیم همچنین اگر خواستیم  در هنگام ذخیره تغیرات یک نام دلخواه نیز برای آن ها تعریف کنیم از دستور زیر استفاده میکنیم 

git stash save "Message"

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

 

حال موقعی که ما کارمونو انجام دادیم و میخاستیم برگردیم به جایی که بودیم ابتدا لیست stash هامونو میگیریم و بعد با استفاده از آیدی آن ها میتونیم ابتدا تغیراتی که انجام دادیم رو ببینیم git show id-stash حال برای برگرداندن

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

git stash applly  id-stash  ==> تو لیستمون هنوز هست
git stash pop  id-stash ==>  از تو لیستمون هم پاک میکند

  

نحوه ی بازگردانی تغیرات اعمال شده در داخل پروژه امان

 

1- اگر ما تغیراتی را در داخل بعضی از فایل هایمان انجام داده باشیم و بخاهیم اون هارو به حالت قبلی اشان برگردونیم 

و از دستورات ادد و کامیت هم اجرا نکرده باشیم آنگاه از دستورات زیر استفاده میکنیم

git checkout name File / . all File استفاده میکنیم 

 2- حال یک موقع هستش ما اومدیم و تغیراتمون رو اعمال کرده ایم و با دستور ادد وارد استیج برنامه کرده ایم و حال

 پشیمون شده ایم و میخاهیم  اون ها رو از داخل  استیج برداریم و به حالت اولیه برگردند برای همین از دستور 

git reset HEAD name File / . all File استفاده میکنیم 
با این کار از حافظه ی استیج برنامه امان کامل پاک می شود
برای برگرداندن این دستورات به طور کلی میایم و باز از دستورات زیر استفاده میکنیم
git checkout name File / . all File استفاده میکنیم 

3- حال یک موقع هست ما هم ادد و هم کامیت کرده ایم و برای رفتن به کامیت های قبلی امان ابتدا با گیت لاگ

میگیریم و بعد از انتخاب کردن از دستورات زیر استفاده میکینم برای برگشتن از یک کامیت به یک کامیت دیگر از دستور

     

            1 -   git reset --soft id-commit  این دستور کامیت های بعدی اش را  در مرحله ی stage نگه میدارد 

                       

           2 -  git reset --mixed id-commit  این دستور به صورت پیش فرض تغیرات را un stage میکند و در 

                    مرحله ی working Directory  قرار میدهد

 

           3 - git reset --hard id-commit مارا مستقیما به اون کامیت امان بر میگرداند و نه در داخل دایرکتوری

                    و نه داخل stage  امان

 

نکته : چطوری بیاین و گیت بش رو داخل ترمینال ادیتور فعالش کنیم

Open Visual Studio Code and press and hold Ctrl + ` to open the terminal.
Open the command palette using Ctrl + Shift + P .
Type - Select Default Shell.
Select Git Bash from the options.
Click on the + icon in the terminal window.
Ctrl + Shift + `
The new terminal now will be a Git Bash terminal.

 

فایل پیوست

emad ta

توسط

emad ta

19 دی 99

6
حذف شده

gitignore : بعضی مواقع هست ما بعضی از فایل هایمان در یک پروژه رو نمیخاهیم توسط گیت دنبال شوند و می خواهیم  آن هارو نادیده بگیرد  و untrack برای همین از مفهومی به نام gitignore استفاده میکنیم برای تعریف آن  در یک پروژه  ابتدا وارد فولدر پروژه امان می شویم و بش را اجرا میکنیم  و سپس از دستور زیر استفاده میکنیم 

 git touch .gitgnore

 

سپس در داخل آن فایل ها یا فولدر هایی که نمیخاهیم دنبال شوند را اضافه میکنیم مثل  node_modules/ *.txt و بعد با status گرفتن میایم و این gitignore رو ادد و کامیت میکنیم

 

 

نکته : حال یک موقع هست حال ما یک موقع هستش میخاهیم گیت تمام فایل های متنی به غیر از یکی را دنبال نکند

!Track.txt   و استثنا قائل شود و تغیرات آن را بررسی کند به شیوه زیر عمل میکنیم

  * معنی همه میدهد 
  معرفی یک وب سایت برای گرفتن فایل های گیت گنور و استفاده از آن ها
  www.gitgnore.io
  * . * مثلا همه ی فایل ها با همه ی پسوند ها 
 *  موقعی که ما در داخل پروژه امان به یک کانفلیکت می خوریم
 * اون <<<<<<< HEAD
 * اخرین کامیت یا تغیری که در برنچ خودمون بوده هستش شاخه فعلی امان
 * >>>>>>>> Branch Name ==>
 *  آخرین تغیر در داخل شاخه که میخاهیم با آن ادغام شیم هست
 * در هنگامی که میایم و به یک کانفلیکت میخوریم برای کامیت کردن آن سعی شود در ابتدایش                                             از
    
 * Fix-Conflict- ....  استفاده بکنیم
 *
 * امکاناتی که خود ادیتور در هنگام برخورد به کانفلیکت میخوریم به شرح زیر
 * 1- accept Current Change ==> قبول کردن تغیرات خودم
 * 2- accept Incoming Change ==> قبول کردن تغیراتی که داره از سمت تو میاد

 

استفاده از وب اپلیکشن هایی مثل  gitLab  و github
 

نکته : برای پاک کردن پروژه امون در داخل گیت لب می توانیم از مسیر های setting و بعد general و بعد Advance 

Setting و بعد با استفاده از نام فایل میام و پروژه پاک میکنیم 

 

git clone  این دستور کاری که انجام می دهد این هست که میاد و اطلاعات مارو از داخل سرور گیت لب به سیستم ما یک کپی می فرسته 

 

برای ارسال اطلاعات پروژه امون به سرور های گیت لب از دستور git push  و برای گرفتن اطلاعات از سرور گیت لب امون از دستور git pull  استفاده میکنیم 

 

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

git clone .............................
git add .
git commit -m "  " 
git push -u origin master

حال برای این که بیاییم و یک پروژه رو از سیستم خودمون به سرور گیت لب ارسال کنیم از دستورات زیر استفاده میکنیم

git init
git remote add origin .............................................
git add .
git commit -m " ....... "
git push -u origin master

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

git remote rename origin   old-origin
git remote add origin ............................
git push -u origin --all
git push -u origin --tags

 

در کار تیمی وقتی ما میایم و یکسری branch درست میکنیم هنگامی که کار ما با شاخه ها تموم شد می توانیم در داخل سایت بیایم و با استفاده از گزینه create merge request یک درخواست اغدام به مستر بفرستیم  تا اون سر تیم امون بیاد و این ها همه رو یکی بکند

 

   برای گرفتن اطلاعات از داخل سرور                          git pull origin master
فایل پیوست

emad ta

توسط

emad ta

19 دی 99