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 انجام بدهیم
نکته : استفاده از دستور 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.
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