-
1. شروع به کار (getting started)
-
2. مقدمات گیت (git basics chapter)
- 2.1 گرفتن یک مخزن گیت (Getting a Git Repository)
- 2.2 ثبت تغییرات در مخزن (Recording Changes to the Repository)
- 2.3 مشاهده تاریخچه کامیتها (Viewing the Commit History)
- 2.4 بازگرداندن تغییرات (Undoing Things)
- 2.5 کار کردن با ریموت ها (Working with Remotes)
- 2.6 تگ کردن (Tagging)
- 2.7 نام مستعار گیت (Git Aliases)
- 2.8 خلاصه (summary)
-
3. انشعابگیری در گیت (Git Branching)
-
4. گیت روی سرور (Git on the server)
- 4.1 پروتکلها (The Protocols)
- 4.2 راهاندازی گیت روی یک سرور (Getting Git on a Server)
- 4.3 ایجاد کلید عمومی SSH شما (Generating Your SSH Public Key)
- 4.4 نصب و راهاندازی سرور (Setting up server)
- 4.5 سرویسدهنده گیت (Git Daemon)
- 4.6 HTTP هوشمند (Smart HTTP)
- 4.7 گیتوب (GitWeb)
- 4.8 گیتلب (GitLab)
- 4.9 گزینههای میزبانی شخص ثالث (Third Party Hosted Options)
- 4.10 خلاصه (Summary)
-
5. گیت توزیعشده (Distributed git)
-
6. GitHub (گیت هاب)
-
7. ابزارهای گیت (Git Tools)
- 7.1 انتخاب بازبینی (Revision Selection)
- 7.2 مرحلهبندی تعاملی (Interactive Staging)
- 7.3 ذخیره موقت و پاکسازی (Stashing and Cleaning)
- 7.4 Signing Your Work (امضای کارهای شما)
- 7.5 جستجو (Searching)
- 7.6 بازنویسی تاریخچه (Rewriting History)
- 7.7 بازنشانی به زبان ساده (Reset Demystified)
- 7.8 ادغام پیشرفته (Advanced Merging)
- 7.9 بازاستفاده خودکار از حل تضادها (Rerere)
- 7.10 اشکالزدایی با گیت (Debugging with Git)
- 7.11 سابماژول ها (Submodules)
- 7.12 بستهبندی (Bundling)
- 7.13 جایگزینی (Replace)
- 7.14 ذخیرهسازی اطلاعات ورود (Credential Storage)
- 7.15 خلاصه (Summary)
-
8. سفارشیسازی Git (Customizing Git)
-
9. گیت و سیستمهای دیگر (Git and Other Systems)
-
10. (Git Internals)
- 10.1 ابزارها و دستورات سطح پایین (Plumbing and Porcelain)
- 10.2 اشیا گیت (Git Objects)
- 10.3 مراجع گیت (Git References)
- 10.4 فایلهای بسته (Packfiles)
- 10.5 نگاشت (The Refspec)
- 10.6 پروتکلهای انتقال (Transfer Protocols)
- 10.7 نگهداری و بازیابی دادهها (Maintenance and Data Recovery)
- 10.8 متغیرهای محیطی (Environment Variables)
- 10.9 (Summary)
-
A1. پیوست A: گیت در محیطهای دیگر (Git in Other Environments)
- A1.1 رابط های گرافیکی (Graphical Interfaces)
- A1.2 Git در ویژوال استودیو (Git in Visual Studio)
- A1.3 Git در Visual Studio Code (Git in Visual Studio Code)
- A1.4 Git در IntelliJ / PyCharm / WebStorm / PhpStorm / RubyMine (Git in IntelliJ / PyCharm / WebStorm / PhpStorm / RubyMine)
- A1.5 Git در Sublime Text (Git in Sublime Text)
- A1.6 گیت در بش (Git in Bash)
- A1.7 Git در Zsh (Git in Zsh)
- A1.8 Git در PowerShell (Git in PowerShell)
- A1.9 خلاصه (Summary)
-
A2. پیوست B: گنجاندن گیت در برنامههای شما (Embedding Git in your Applications)
-
A3. پیوست C: دستورات گیت (Git Commands)
- A3.1 تنظیم و پیکربندی (Setup and Config)
- A3.2 گرفتن و ایجاد پروژهها (Getting and Creating Projects)
- A3.3 نمونهبرداری پایهای (Basic Snapshotting)
- A3.4 انشعابگیری و ادغام (Branching and Merging)
- A3.5 بهاشتراکگذاری و بهروزرسانی پروژهها (Sharing and Updating Projects)
- A3.6 بازرسی و مقایسه (Inspection and Comparison)
- A3.7 عیبیابی (Debugging)
- A3.8 اعمال تغییرات به صورت پچ (Patching)
- A3.9 ایمیل (Email)
- A3.10 سیستمهای خارجی (External Systems)
- A3.11 مدیریت (Administration)
- A3.12 دستورات سطح پایین گیت (Plumbing Commands)
3.4 انشعابگیری در گیت (Git Branching) - روندهای کاری شاخهها (Branching Workflows)
روندهای کاری شاخهها (Branching Workflows)
حالا که اصول پایهای شاخهزنی و ادغام را یاد گرفتهاید، چه کارهایی میتوانید یا باید با آنها انجام دهید؟ در این بخش، به برخی جریانهای کاری رایجی که این شاخهزنی سبکوزن امکانپذیر میکند، میپردازیم تا بتوانید تصمیم بگیرید آیا مایلید آنها را در چرخه توسعه خود به کار ببرید یا خیر.
شاخههای بلندمدت (Long-Running Branches)
از آنجا که گیت از ادغام سهطرفه ساده استفاده میکند، ادغام مکرر از یک شاخه به شاخهای دیگر در طول زمان معمولاً کار آسانی است. این بدین معناست که میتوانید چندین شاخه همیشه باز داشته باشید که برای مراحل مختلف چرخه توسعه خود از آنها استفاده میکنید؛ میتوانید بهطور مرتب از برخی شاخهها به شاخههای دیگر ادغام انجام دهید.
بسیاری از توسعهدهندگان گیت دارای جریانی کاری هستند که این رویکرد را در بر میگیرد، مثلاً شاخه master
آنها فقط شامل کدی است که کاملاً پایدار است — احتمالاً تنها کدی که منتشر شده یا قرار است منتشر شود.
آنها شاخه موازی دیگری به نام develop
یا next
دارند که از آنجا کار میکنند یا برای تست پایداری استفاده میکنند — لزوماً همیشه پایدار نیست، اما هرگاه به وضعیت پایداری برسد، میتوان آن را به master
ادغام کرد.
این شاخه برای جذب شاخههای موضوعی (شاخههای کوتاهمدت، مانند شاخه iss53
شما در گذشته) وقتی آماده هستند، استفاده میشود تا اطمینان حاصل شود که همه تستها را پاس میکنند و خطا وارد نمیکنند.
در واقع، ما درباره اشارهگرهایی صحبت میکنیم که در خط کامیتهایی که ایجاد میکنید، به جلو حرکت میکنند. شاخههای پایدار در تاریخچه کامیتهای شما عقبتر هستند و شاخههای پیشرفتهتر در بالاتر تاریخچه قرار دارند.

بهطور کلی، راحتتر است که آنها را به عنوان انبارهای کاری در نظر بگیرید، جایی که مجموعهای از کامیتها وقتی کاملاً تست میشوند، به انبار پایدارتر منتقل میشوند.

میتوانید این روند را برای چندین سطح پایداری ادامه دهید.
برخی پروژههای بزرگتر همچنین شاخهای به نام proposed
یا pu
(بهروزرسانیهای پیشنهادی) دارند که شاخههای ادغام شدهای در آن قرار دارد که ممکن است برای وارد شدن به شاخههای next
یا master
هنوز آماده نباشند.
ایده این است که شاخههای شما در سطوح مختلفی از پایداری قرار دارند؛ هنگامی که به سطح پایداری بالاتری رسیدند، به شاخه بالاتر خود ادغام میشوند.
دوباره، داشتن چند شاخه بلندمدت ضروری نیست، اما اغلب مفید است، بهویژه وقتی با پروژههای بسیار بزرگ یا پیچیده سر و کار دارید.
شاخههای موضوعی (Topic Branches)
با این حال، شاخههای موضوعی در پروژههایی با هر اندازهای مفید هستند. شاخه موضوعی یک شاخه کوتاهمدت است که شما برای یک ویژگی خاص یا کار مرتبط ایجاد و استفاده میکنید. این کاری است که احتمالاً قبلاً با یک سیستم کنترل نسخه انجام ندادهاید، زیرا معمولاً ایجاد و ادغام شاخهها هزینهبر است. اما در گیت، ایجاد، کار روی، ادغام و حذف شاخهها چندین بار در روز امری معمول است.
شما این موضوع را در بخش قبلی با شاخههای iss53
و hotfix
که ایجاد کردید دیدید.
چند کامیت روی آنها انجام دادید و بلافاصله پس از ادغام آنها در شاخه اصلی، آنها را حذف کردید.
این تکنیک به شما امکان میدهد سریع و کامل بین زمینهها جابجا شوید — چون کار شما به بخشهای جداگانهای تقسیم شده که همه تغییرات آن شاخه مربوط به همان موضوع است، دیدن آنچه در بازبینی کد اتفاق افتاده آسانتر است.
شما میتوانید تغییرات را برای چند دقیقه، روز یا ماه نگه دارید و وقتی آماده شدند، آنها را ادغام کنید، بدون توجه به ترتیب ایجاد یا کار روی آنها.
برای مثال، فرض کنید روی شاخه master
کار میکنید، سپس برای یک مسئله شاخهای به نام iss91
ایجاد میکنید، کمی روی آن کار میکنید، سپس شاخه دوم iss91v2
را برای امتحان راه دیگری در همان مسئله ایجاد میکنید، به شاخه master
بازمیگردید و مدتی روی آن کار میکنید، سپس شاخهای به نام dumbidea
ایجاد میکنید برای کاری که مطمئن نیستید ایده خوبی باشد.
تاریخچه کامیتهای شما چیزی شبیه به این خواهد بود:

حالا فرض کنید تصمیم میگیرید راهحل دوم برای مسئله (شاخه iss91v2
) را بیشتر میپسندید؛ و شاخه dumbidea
را به همکارانتان نشان میدهید و معلوم میشود ایدهای نابغهوار است.
میتوانید شاخه اصلی iss91
را کنار بگذارید (و کامیتهای C5
و C6
را از دست بدهید) و دو شاخه دیگر را ادغام کنید.
تاریخچه شما در آن صورت چنین خواهد بود:

dumbidea
and iss91v2
ما در بخش گیت توزیعشده (Distributed git) به جزئیات بیشتری درباره جریانهای کاری مختلف پروژه گیت شما خواهیم پرداخت، پس قبل از اینکه تصمیم بگیرید کدام طرح شاخهبندی را برای پروژه بعدی خود استفاده کنید، حتماً آن فصل را مطالعه نمایید.
مهم است که هنگام انجام همه این کارها به خاطر داشته باشید که این شاخهها کاملاً محلی هستند. وقتی شاخه میزنید و ادغام میکنید، همه کارها فقط در مخزن گیت شما انجام میشود — هیچ ارتباطی با سرور برقرار نمیشود.