آموزش Git - بخش دوم

توسط: محسن درم بخت | منتشر شده در 1399/05/21 | بازدید : 455 بار | زمان مطالعه : 15 دقیقه

آموزش Git  - بخش دوم


در بخش اول مقاله آموزش گیت با نحوه نصب Git و ایجاد local repository آشنا شدیم. دستورات اولیه Git را نیز با هم مشاهده کردیم. حالا نوبت به وصل کردن local repository به یک remote repository می رسد.

ما باید بتوانیم تغییرات local repository خود را روی یک remote repository ارسال کنیم تا سایر اعضای تیم پروژه هم بتوانند به تغییرات ما دسترسی داشته باشند. برای داشتن یک remote repository ما راه های مختلفی داریم. یکی از این راه ها استفاده از remote repository های آنلاین می باشد که امروز استقبال زیادی از آنها شده است. در ابتدای مقاله می خواهیم با دو برند معروف در زمینه repository های آنلاین مربوط به Git آشنا شویم.

GitHub چیست ؟

گیت هاب یکی از محبوب ترین ها در بخش Remote Repository ها می باشد که توانسته با امکانات جانبی خود یکی از بازیگران اصلی در زمینه source control ها و همچنین یک منبع بسیار بزرگ برای پروژه های open source  باشد. در تصویر زیر آمار تعداد کاربران، تعداد پروژه ها و تعداد تیم ها و شرکت هایی که از GitHub استفاده می کنند را مشاهده می کنید.

در تصویر بالا مشاهده کردید که تعداد بسیار بالا می باشد و بیش از یکصد میلیون برنامه نویس عضو GitHub می باشند و این آمار تا ماه آگوست 2020 می باشد. پس اگر تا کنون شما در GitHub حساب کاربری ایجاد نکرده اید همین الان دست به کار شوید و یک حساب کاربری برای خود ایجاد کنید.

ما در گیت هاب می توانیم از پروژه های open source دیگران استفاده کنیم و براحتی source پروژه ها را مطالعه کنیم. آنها را دانلود کنیم و بتوانیم از کدهای مرتبط با کار خودمان استفاده کنیم. یا در پروژه های open source مشارکت کنیم و بخشی از آن را توسعه دهیم یا کدی را بهینه کنیم.
ما در اینجا از گیت هاب برای بخش Remote Repository گیت خود استفاده می کنیم. البته کاربردهای دیگری هم GitHub دارد که مجدد در این بخش به صورت موردی ذکر شده است :

  • کاربرد GitHub به صورت یک Host برای پروژه ها می باشد.
  • فضایی برای قراردادن Remote Repository ها بر روی آن
  • مخزن پروژه های Open Source در دنیای برنامه نویس ها

استفاده هایی که ما می توانیم از GitHub داشته باشیم :

  • از نمونه پروژه های رون آن استفاده کنیم
  • ما می توانیم بر روی GitHub دو نوع Remote Repo داشته باشیم :
    • Public Repo : که به صورت عمومی برای همه قابل مشاهده می باشد
    • Remote Repo : این امکان را به شما می دهد که پروژه های خود را روی آن داشته باشید.ولی کاربران ایرانی به دلیل تحریم امکان دسترسی به این سرویس را فعلا ندارند.

نحوه ایجاد Repository جدید و وصل کردن git local به Github
برای افزودن پروژه local خود به GitHub ابتدا باید روی سایت GitHub یک اکانت ساخته و سپس یک پروژه ایجاد کنیم. حالا در صفحه پروژه ایجاد شده یک آدرس به صورت زیر نمایش داده می شود که باید آن را در مسیر جاری پروژه در سیستم خودتان اجرا کنید تا local repository شما به همین راحتی بهremote repository مربوط به GitHub وصل شود.

 git remote add origin https://github.com/derambakht/SampleApp.git

در زمان ایجاد پروژه جدید در GitHub ما می توانیم دو مدل پروژه خود را ایجاد کنیم. یک مدل به صورت public که همه می توانند کدهای پروژه شما را مشاهده کنند و این برای پروژه های تجاری ما مناسب نمی باشد و یک مدل به صورت private که این حالت برای پروژه های شخصی و تجاری ما بسیار خوب می باشد.

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

در ادامه چند دستور مهم که در زمان کار با Remote Repository ها به آنها نیاز داریم را با هم مشاهده می کنیم. یک نکته مهم دیگر اینکه دستورات Git برای Remote Repository ها تفاوتی ندارد، یعنی تفاوتی ندارد شما به GitHub کار می کنید یا با GitLab. دستوراتی که از Git یاد می گیرید در همه ثابت می باشد.

برای مشاهده لیست Remote repo های یک پروژه در Git می توانید از دستور زیر استفاده کنید:

git remote -v

خوب الان پروژه شما به Remote Repository وصل می باشد. در تصویر بالا هم مشاهده می کنید که نشان می دهد که پروژه شما به چه آدرس remote وصل می باشد. در تصویر بالا دو خط آدرس آمده است که یکی برای fetch یا گرفتن تغییرات از remote به روی local می باشد و دیگری push برای ارسال تغییرات از local به remote می باشد.

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

”git config –global user.name “Mohsen Derambakht

”git config global user.email “derambakht@gmail.com

در صورتی که نیاز به password باشد در حالت push یک پنجره باز شده و از شما رمز عبور اکانت را یکبار پرسیده و اجازه ارسال تغییرات را به شما می دهد.

برای ارسال تغییرات خود از روی local به روی remote یا همان عمل push کردن از دستور زیر می توانیم استفاده کنیم :

git push origin master

با اجرای این دستور تغییرات شما از روی local به روی remote ارسال می شود.

نحوه مشاهده لیست همه config ها : git config - -list

 

شما خیلی وقت ها عضو یک تیم برنامه نویسی هستید و می خواهید یک نسخه از پروژه را روی سیستم خود داشته باشید و سپس روی آن کار خود را شروع کنید. در این حالت باید ابتدا پروژه خود را از روی remote repository روی سیستم خود clone کنید. برای این کار باید دستور زیر را وارد کنید :

git clone https://github.com/derambakht/GitHubSample.git

با اجرای دستور بالا کل پروژه در مسیری که این دستور را اجرا کرده اید کپی می شود.

در ادامه با دستورات بسیار مهمی در Git آشنا می شویم که بسیار کاربردی و مهم می باشند.

 

Branch در Git :


branch در git معنای شاخه و مسیر را دارید. به صورت پیش فرض ما در git یک مسیر و شاخه اصلی داریم که به آن master گفته می شود. همه تغییرات و اتفاقات در حالت اصلی روی master اعمال می شود.

خوب مشکل کار کجا هست و این branch master چه نکته ای دارد ؟

شما فکر کنید با اعضای تیم خود در حال کار روی پروژه و انجام task ها هستید. در همان لحظه نیاز دارید که یک نسخه جدید build کنید و روی سرور یکی از کافرماها اجرا کنید. خوب الان اعضای تیم شما کلی تغییرات داشته اند که شاید مشکل داشته باشند و یا شما نخواهید در این نسخه آن تغییرات وجود داشته باشند.

یا تغییرات یک بخش مثل آپلودر فایل شما هنوز مشخص نیست عملکرد خوبی داشته باشد ولی به ناچار روی شاخه اصلی شما commit شده است. اینجا ما درگیر branch ها می شویم. ما باید برای انجام هرکار جدیدی یک branch ایجاد کنیم و تغییرات خود را روی آن branch انجام دهیم و در نهایت و در صورت تایید تغییرات branch ایجاد شده را در branch master خود merge کنیم.

پس شما و اعضای تیم حتما باید برای هر task جدیدی یک branch ایجاد کنند و کارهای خود را روی آن branch ها انجام دهند. هیچ کس به جز مدیر پروژه نباید دسترسی و اجازه کار با branch master را داشته باشد.

وقتی شما یک branch جدید ایجاد می کنید انگار یک کپی از کد را از زمان ایجاد branch دارید و روی آن کار می کنید و در نهایت می توانید branch ایجاد شده را در branch اصلی merge کنید یا اصلا آن branch را به حالت خود رها کنید، چون تغییرات ایجاد شده مورد قبول نمی باشد و نباید در کد اصلی قرار گیرند.

برای مشاهده لیست branch ها می توانید از دستور git branch استفاده کنید. این دستور لیست branch ها را نمایش می دهد و خطی که کنار آن علامت ستاره وجود دارد، branch فعال شما می باشد.

برای ایجاد branch جدید می توانید از دستور git branch name استفاده کنید. به جای کلمه name باید نام branch خود را بنویسید. انتحاب نام مناسب برای branch بسیار مهم می باشد چون تعداد branch در ادامه کار شما بسیار زیاد می شود و بهتر است از یک استاندارد نامگذاری برای انتخاب نام استفاده کنید. مانند مثال زیر :

شما با مشاهده نام بالا براحتی متوجه می شوید که این branch مربوط به کدام task می باشد و چه کاری داخل آن انجام شده است. پس در نامگذاری branch های خود بسیار خوش سلیقه و مرتب عمل کنید.

بعد از ایجاد branch جدید مجدد می توانید از دستور git branch استفاده کنید و لیست branch ها خود را مشاهده کنید. در لیست مشاهده می کنید که همچنان branch فعال، branch دیگری است و branch ایجاد شده شما انتخاب نشده است. برای انتخاب branch مورد نظر به عنوان branch اصلی از دستور زیر استفاده می کنیم :

git checkout branchName

این دستور باعث می شود که branch مورد نظر فعال شود و شما تغییرات و commit های خود را روی آن اعمال کنید.

پس از اعمال تغییرات و نهایی کردن آنها در branch مورد نظر شما، حالا قصد دارید که این branch ایجاد شده را در branch master یا branch دیگر ادغام یا merge کنید. برای این کار ابتدا باید به branch مقصد سوئیج کنید، یعنی مثلا به branch master خود سوئیچ می کنید :

git checkout master

حالا برای merge شدن باید دستور زیر را اجرا کنید :

git merge branch-name

با اجرای این دستور تغییرات branch-name در branch جاری شما به طور مثال master ادغام خواهد شد و شما همه تغییرات داخل branch-name خود را داخل master خواهید دید.

پس مهم ترین کاربرد branch این هست که شما بتوانید تغییرات خود را روی یک نسخه به غیر از نسخه اصلی انجام دهید و در صورت اطمینان از تغییرات انجام شده آن را روی شاخه اصلی اعمال کنید. مجدد لیست دستورات مربوط به branch را با هم مشاهده می کنیم :

مشاهده لیست branch  ها :  git branch

ایجاد یک branch  جدید : git branch BranchName

نحوه سوئیچ کردن بین branch ها : git checkout BranchName

نحوه ایجاد کردن branch و سوئیچ روی branch ایجاد شده : git checkout -b BranchName

نحوه merge کردن branch مورد نظر در branch دیگر : از source  به destination

git checkout destinationBranch =>  git checkout master

git merge sourceBranch => git merge feature-english-version

 

برای مشاهده و مقایسه تغییرات مربوط به دو branch نیست به یکدیگر می توانید از دستور زیر استفاده کنید :

git diff branch-1 branch-2

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

پس شما نیاز دارید بعضی وقت ها تغییرات را بدون commit کردن یکجا به طور موقت ذخیره کنید و در زمان نیاز آنها را بازیابی کنید و کار خود را در آن بخش ادامه دهید. برای این کار از دستور stash استفاده می کنیم. ما می توانیم به کمک این دستور تغییرات خود را به صورت موقت با یک نام ذخیره کنیم و به کار خود ادامه دهیم و در زمان مورد نظر آن تغییرات ذخیره شده را بازیابی کنیم و آنها را تکمیل و در نهایت commit کنیم.

کاربرد stash در git : ذخیره موقت تغییرات Commit نشده با یک نام مشخص و restore کردن آنها در زمان دلخواه :

دستور ذخیره کردن تغییرات به کمک stash با نام مورد نظر :

git stash save contact-en-page-changes

در حالت عادی stash فایل های جدید افزوده شده که وضعیت untracked دارند را ذخیره نمی کنید، برای ذخیره کردن آن فایل ها در stash باید از سوئیچ - - include-untracked استفده کنیم.

Git stash save contact-en-page-changes –include-untracked

نحوه کار stash به این شکل است که یک stash به صورت یک آرایه می باشد که با دستور git stash save یک آیتم که همان تغییرات شما است به آن افزوده می شود و با دستور git stash pop آخرین آیتم از انتهای آرایه برداشته می شود و به ما برگردانده می شود.

برگرداندن تغییرات آخرین stash ایجاد شده در branch جاری :

git stash pop

مشاهده لیست stash ها : git stash list

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

git stash apply

شما می توانید تغییرات رو از stash با دستور apply بردارید بدون اینکه تغییرات از stash حذف شوند.

 

کاربرد Tag در Git


 
برای مدیریت Version ها در گیت از Tag استفاده می کنیم. Tag امکان بسیار خوبی می باشد که می توانیم ورژن بندی پروژه خود را توسط آن مدیریت کنیم. براحتی می توانیم تا نقطه مورد نظر ورژن یا tag بزنیم و در صورت نیاز به آن نقطه بازگشته و خروجی بگیریم.

نمایش لیست تگ ها  : git tag

ایجاد تگ جدید : git tag TagName

حذف تگ مورد نظر در local repo : git tag  -d TagName

ارسال تگ ها از local به Remote repository : git push - -tags

حذف تگ مورد نظر از روی Remote repository : git push --delete origin tagName

نحوه سوئیچ کردن و حرکت به tag مورد نظر : git checkout tags/tagName

با دستورات بالا براحتی می توانیم یک tag جدید ایجاد کنیم و بتوانیم با دستور checkout به tag مورد نظر حرکت کنیم و یا در صورت عدم نیاز به یک tag آن را حذف کنیم.

تا اینجا با دستورات مفید و پرکاربرد git آشنا شدیم. پیشنهاد می کنم حتما یک پروژه ایجاد کنید و این دستورات را در آن به صورت عملی تمرین کنید.

امیدوارم که خواندن این مقاله برای شما مفید و کاربردی بوده باشد.