گیت به زبان ساده

این مقاله رو برای این مینویسم که خیلی جاها از من سوال میشه که گیت رو براشون توضیح بدم، و یاد حرف جدی میوفتم که میگه اگر ی سوال رو بیشتر از دوبار پرسیدن باید تبدیل به مقاله بشه و همیشه رفرنس بدی بهشون، پس منم تصمیم گرفتم همه آنچه که نیازه بیام و اینجا بنویسم.گیت (Git) چیستمطابق توضیحی ویکی پدیا، گیت یک نرم‌افزار کنترل نسخه و متن‌باز می باشد که برای مدیریت منبع کد است و برای دنبال کردن تغییر فایلهای کامپیوتری و دنبال کردن کردن کارهای انجام شده روی آنها توسط افراد مختلف است. هدف اولیه این نرم‌افزار برای استفاده در پروژه‌های نرم‌افزاری بوده است ولی می‌توان از آن تنها برای دنبال کردن تغییر فایل‌ها هم استفاده کرد.برای یک تیم حرفه ای مهمه که همه اعضای(Developer های) اون بتونن با ابزارهای معین شده در تیم کار کنند. یا حداقل آشنایی استفاده از این ابزارها را داشته باشند. دلیلشم اینه که گیت یه کپی از پروژه رو به دست هر کدوم از اعضای تیم میرسونه و به تیم این قدرت رو میده که بتونن همزمان به تکمیل بخش های مختلف بپردازن و توسعه خودشون رو تکمیل کنند.منظور از آشنایی اعضای تیم این است که بتونن با 4 کامند اصلی (Pull,Push,Commit,Add) این ابزار کار کنند.خوب بریم برای استفاده ابزار تا بهتر بتونیم درک کنیم.برای شروع ابتدا باید Git رو روی سیستم خودتون نصب کنین، که بعد از نصب یک Bash به ما میده که میتونیم دستوراتش رو اجرا کنیم(ی چیزی شبیه به CMD). محیط git Bashابزارهای گرافیکی قوی هم هستند که برای دوستانی که با کامند راحت نیستند میتونند استفاده کنند که چند نمونه اش رو لیست میکنمSourceTreeTortoiseGitGit Extensionsمشاهده همه ابزار هاشروع گیتما برای شروع دو حالت داریم یا میخواییم یک ریپازیتوری جدید بسازیم یا میخواییم ریپازیتوری موجود رو بگیریم و کار کنیم.در حالت اول ما با استفاده از دستور init میتونیم ی پپوشه رو به گیت بدیم و برامون مدیریت کنه.برای این کار به اون مسیری که میخواییم میریم و دستور $ git initاجرای دستور git initکه با این کار شما، گیت یک فایلی که پنهان هست به نام .git میسازید که اطلاعات فایلتون رو اون تو مدیریت میکنه .حالا اولین گام برای تست گیت رو برمیدارم یک فایل داخل مسیر میسازیم ( با هر روشی ) تا ببینیم گیت چ رفتاری برای این حالت داره.من یکی فایل متنی با نام one.txt میسازم و بعد از اون دستور زیر رو میزنم ببینم گیت چ واکنشی به فایل جدید من داره$ git statusاجرای دستور git statusهمینطور که در تصویر بالا میبینیم بهمون میگه که دوست خوب من شما یه فایلی داری که هنوز بهم نگفتی که مدیریتش کنم ( دستور git status یه دستور هست برای اینکه شما ببینید فایل هاتون تو چه شرایطی هستن هنوز به مدیریت گیت اضافه شدن یا نه ؟ یا مثلا این فایل ها نهایی شدن یا نه ؟ )حالا برای الینکه به گیت بگیم مدیریتش با شما از دستور زیر استفاده میکنیم$git add one.txtبعد از دستور بالا دوباره دستور git status رو اجرا میکنیم تا رفتار گیت رو ببینیمبعد از اجرای دستور git addهمینطور که میبینیم گیت مسئولیت فایل رو بر عهده گرفت حالا بریم ببینیم در برابر تغییرات چ رفتاری داره، برای این کار من محتویات فایل one.txt رو تغییر میدم دوباره وضعیت رو چک میکنمبعد از تغییرات فایلبله همینطور که میبینیم داره بهم میگه که تو فایلتو تغییرش دادی پس با گیت میتونیم اینطوری ببینیم و بهمون کمک میکنه که با دقت تر کد بزنیم!خوب بعد از تغییرات ما باید این تغییرات رو ثبت کنیم که برای اینکار از دستور commit استفاده میکنیم$git commit -m [message]احرای دستور git commitخوب گیت این تغییرات رو ثبت کرد و از این به بعد به تغییرات جدید گوش میده.گیت توی دولایه دیتا رو برای ما نگه میداره یکی که میشه لوکال خودمون که با دستور کامیت فقط روی لوکال ما ثبت میشه اگر ما بخواهیم داده ها رو روی سرور منتقل کنیم از دستور Push استفاده میکنیم.کار با ریپازیتوری های گیت سروراگر ما بخواهیم تغییرات رو روی سرور منتقل کنیم تا همه همکاران هم بهش دسترسی داشته باشند هم برای کارهای Merge , ... که بهش خواهیم رسید باید به سرور یا به اصطلاح بالا ارسال بشوند.ما فرض بر این میگیریم که سرور ما بالا آماده است (GitHub,GitLab,Azure Git , ای سرور شخصی)در اینجا با استفاده از دستور push ما تغییرات Commit شده خودمون رو میتونیم به بالا منتقل کنیم.$git push origin [branchName]حالا اگر ما بخواهیم آخرین تغییرات بالا رو بیاریم روی لوکال خودمون از دستور Pull استفاده میکنیمgit pull [<options>] [<repository> [<refspec>…​]]تا اینجا موارد پایه کار با ابزار بود حالا بریم سراغ مواردی که باید بدونیم.مبحث اول Branchزمانی که با استفاده از گیت یک ریپازیتوری جدید می‌سازیم، به صورت خودکار یک برنچ (شاخه) تحت عنوان master ساخته می‌شود که نقش شاخهٔ اصلی ریپازیتوری مذکور را بازی خواهد کرد و هر کامیتی که انجام دهیم نیز روی این شاخه اِعمال خواهد شد و این در حالی است که معمولاً‌ تیم‌های نرم‌افزاری از این شاخه به عنوان نسخه‌ای از نرم‌افزار استفاده می‌کنند که قرار است روی سرورهای اصلی دیپلوی(Deploy) گردد. با این تفاسیر، منطقی به نظر می‌رسه که این بِرَنچ به عنوان فضای آزمون و خطا در حین کدنویسی قملداد نشده بلکه فضاها یا بهتر بگوییم شاخه‌های فرعی دیگری ساخته و در آن‌ها اقدام به توسعهٔ فیچرهای جدید نموده سپس آن‌ها را با شاخهٔ مَستر ادغام نمود.یکی از مزایای وجود شاخه‌ها در سیستم گیت این است که می‌توان به تعداد توسعه‌دهندگانی که در تیم حضور دارند برنچ‌های اختصاصی ساخته و در آنِ واحد تمامی اعضای تیم بتوانند اقدام به توسعهٔ نرم‌افزار کنند. برای درک بهتر این موضوع، فرض کنیم برنامه نویسی داریم به نام بهزاد قرار است قابلیت درگاه پرداخت را به پروژه بیفزاید و دولوپر دیگری به نام سهند قرار است تا رابط کاربری را تکمیل کند؛ در چنین شرایطی، می‌توان دو شاخهٔ‌ فرعی از شاخهٔ مَستر تحت عناوین دلخواهی همچون behzad-branch-gateway و sahand-branch-ui ایجاد کرده و هر کدام از ایشان با سهولت هرچه تمام‌تر شروع به کدنویسی کرده و چنانچه در نهایت کدهای نوشته‌شده مورد تأیید مدیر فنی بود،‌ با شاخهٔ اصلی (مَستر) ادغام خواهند شد.همان‌طور که در تصویر فوق ملاحظه می‌شود، خط عمودی که در سراسر نمودار ملاحظه می‌شود به عنوان بِرَنچ اصلی یا مَستر است که فرض می‌کنیم توسط توسعه‌دهندهٔ اصلی پروژه کامیت‌هایی تحت عناوین C1 و C2 انجام شده است. سپس یک شاخه از شاخهٔ اصلی جدا شده و نامی دلخواه همچون Branch1 برای آن در نظر گرفته‌ایم که فرضاً توسط یکی از اعضای تیم هَندل می‌گردد به طوری که وی سه کامیت داخل این شاخه انجام داده است. در آنِ واحد،‌ برای یکی دیگر از اعضای تیم شاخه‌ای به نام Branch2 ساخته شده و او نیز یک کامیت انجام داده است. در نهایت، دولوپر اصلی این پروژه کلیهٔ تغییرات اِعمال‌شده در دو بِرَنچ فوق را با بِرَنچ اصلی (مَستر) ادغام کرده و کلیهٔ‌ این تغییرات را تحت عنوان C7 کامیت کرده است.با این توضیحات تئوریک،‌ در ادامهٔ‌ این آموزش خواهیم دید که به چه شکل به صورت عملی می‌توانیم اقدام به ساخت بِرَنچ‌های مختلف کرده سپس آن‌ها را با یکدیگر ادغام نمود. ادامه این بخش رو میتونیم از منبع اصلی این بخش یعنی سکان آکادمی استفاده کنیم.و همینطور برای این قسمت من مقاله هایی در خود ویرگول دیدم که لینک هاش رو قرار میدم تا استفاده کنینچگونه از Branch ها برای مدیریت کدها در گیت استفاده کنیممکمل قدرتمند گیت git flowو همچنین نکات مفیدی که در گیت میتونیم استفاده کنیم تا به اصطلاح Best Practice کار کرده باشیم هم در لینک زیر دوست خوبمون زحمتش رو کشیدنBest Practice های گیت