-
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)
A3.4 پیوست C: دستورات گیت (Git Commands) - انشعابگیری و ادغام (Branching and Merging)
انشعابگیری و ادغام (Branching and Merging)
تنها تعداد اندکی از دستورات وجود دارند که بخش اعظم عملکرد شاخهبندی و ادغام در گیت را پیادهسازی میکنند.
مدیریت شاخهها در گیت (git branch)
دستور git branch
در واقع نوعی ابزار مدیریت شاخه است. این دستور میتواند شاخههای موجود را فهرست کند، شاخهٔ جدید ایجاد کند، شاخهها را حذف کند و نام شاخهها را تغییر دهد.
بخش عمدهای از فصل انشعابگیری در گیت (Git Branching) به دستور branch اختصاص دارد و در سرتاسر فصل از آن استفاده شده است. ابتدا آن را در ایجاد یک شاخه جدید (Creating a New Branch) معرفی میکنیم و اکثر ویژگیهای دیگر آن (فهرستکردن و حذف) را در مدیریت شاخهها (Branch Management) بررسی میکنیم.
در شاخههای دنبالکننده (Tracking Branches) از گزینه git branch -u
برای تنظیم شاخهٔ دنبالشونده (tracking branch) استفاده میکنیم.
در نهایت، بخشهایی از کاری که در پسزمینه انجام میدهد را در مراجع گیت (Git References) مرور میکنیم.
تغییر شاخه یا بازیابی فایل در گیت (git checkout
)
دستور git checkout
برای سویچکردن بین شاخهها و چکاوت (برگرداندن محتوا) به شاخه کاری شما استفاده میشود.
برای اولین بار این دستور را همراه با دستور git branch
در تغییر شاخه (Switching Branches) میبینیم.
میآموزیم چگونه با استفاده از گزینه --track
برای شروع دنبالکردن شاخهها اقدام کنیم در شاخههای دنبالکننده (Tracking Branches).
با استفاده از --conflict=diff3
از آن برای بازگرداندن (reintroduce) تداخلات فایلها استفاده میکنیم در Checking Out Conflicts (بررسی تعارضها).
روابط آن با git reset
را با جزییات بیشتر در بازنشانی به زبان ساده (Reset Demystified) بررسی میکنیم.
در نهایت، برخی جزئیات پیادهسازی را در نشانگر HEAD (The HEAD) شرح میدهیم.
ادغام شاخهها در گیت (git merge)
ابزار git merge
برای ادغام یک یا چند شاخه در شاخهٔ فعلی که چکاوت کردهاید به کار میرود. سپس شاخهٔ جاری را به نتیجهٔ ادغام جلو میبرد.
دستور git merge
اولینبار در شاخهبندی پایهای (Basic Branching) معرفی شد. اگرچه در فصلهای مختلف کتاب از آن استفاده شده، اما تنوعهای دستور merge بسیار محدود است — معمولاً فقط git merge <branch>
با نام تک شاخهای که میخواهید با آن ادغام کنید.
نحوه انجام ادغام بهصورت squash (جایی که گیت کارها را ادغام میکند اما طوری رفتار میکند که گویی فقط یک کامیت جدید است و تاریخچهٔ شاخهٔ ادغامشونده را ثبت نمیکند) را در انتهای پروژهی عمومی فورک شده (Forked Public Project) بررسی کردیم.
در مورد فرایند و دستور merge مطالب زیادی گفتیم، از جمله گزینهٔ -Xignore-space-change و فلگ --abort
برای متوقف کردن یک ادغام مشکلدار در ادغام پیشرفته (Advanced Merging).
همچنین یاد گرفتیم که چگونه قبل از ادغام امضاها را در صورتی که پروژهتان از امضای GPG استفاده میکند، تأیید کنیم، که در امضای کامیتها (Signing Commits) آمده است.
در نهایت در مورد Subtree merging در ادغام Subtree (Subtree Merging) بحث کردیم.
ابزار ادغام در گیت (git mergetool)
دستور git mergetool صرفاً در صورتی که هنگام ادغام با مشکل مواجه شوید یک ابزار خارجی کمکِ ادغام را راهاندازی میکند.
ما بهطور مختصر آن را در مرج کانفیلیکت پایه (Basic Merge Conflicts) ذکر کردهایم و در ابزارهای خارجی ادغام و مقایسه (External Merge and Diff Tools) به تفصیل توضیح دادهایم که چگونه میتوانید ابزار ادغام خارجی خود را پیادهسازی کنید.
نمایش تاریخچه گیت (git log)
دستور git log برای نمایش تاریخچهٔ قابل دسترس ثبتشدهٔ یک پروژه از آخرین اسنپشات کامیت به عقب استفاده میشود. بهطور پیشفرض تنها تاریخچهٔ شاخهای را که در آن قرار دارید نشان میدهد، اما میتوان به آن سرها یا شاخههای مختلف یا حتی متعدد داد تا از آنها عبور کند. همچنین اغلب برای نمایش تفاوتها بین دو یا چند شاخه در سطح کامیت بهکار میرود.
این دستور تقریباً در هر فصل کتاب برای نمایش تاریخچهٔ یک پروژه استفاده شده است.
فرمان را معرفی میکنیم و آن را در مشاهده تاریخچه کامیتها (Viewing the Commit History) بهصورت نسبتاً عمیق پوشش میدهیم.
در آنجا به گزینههای -p
و --stat
میپردازیم تا ایدهای از تغییراتی که هر کامیت وارد کرده بدست آوریم و از گزینههای --pretty
و --oneline
برای مشاهده فشردهتر تاریخچه استفاده میکنیم، همراه با چند گزینه ساده برای فیلتر کردن بر اساس تاریخ و مؤلف.
در ایجاد یک شاخه جدید (Creating a New Branch) آن را با گزینه --decorate
به کار میبریم تا بهراحتی محل اشارهگرهای شاخهها را ببینیم و همچنین از گزینه --graph
استفاده میکنیم تا ببینیم تاریخچههای منشعب چگونه به نظر میرسند.
در تیم کوچک خصوصی (Private Small Team) و بازههای کامیت (Commit Ranges) نحو branchA..branchB
را پوشش میدهیم تا با استفاده از دستور git log
ببینیم کدام کامیتها نسبت به شاخهی دیگر منحصر به همان شاخهاند.
در بازههای کامیت (Commit Ranges) این موضوع را نسبتاً مفصل بررسی میکنیم.
در گزارش ادغام (Merge Log) و سه نقطه (Triple Dot) از فرمت branchA…branchB
و نحو --left-right
برای دیدن اینکه چه چیزهایی در یکی از شاخهها هست ولی در هر دو نیست، استفاده میکنیم.
در گزارش ادغام (Merge Log) همچنین میبینیم چگونه از گزینه --merge
برای کمک به اشکالزدایی تداخلهای مرج و از گزینه --cc
برای بررسی تداخلهای کامیتهای مرج در تاریخچهتان بهره ببریم.
در نامهای کوتاه RefLog (RefLog Shortnames) از گزینه -g
برای مشاهده reflog گیت از طریق این ابزار به جای گشتن در شاخهها استفاده میکنیم.
در جستجو (Searching) به استفاده از گزینههای -S
و -L
برای انجام جستجوهای نسبتاً پیشرفته درباره چیزی که بهصورت تاریخی در کد اتفاق افتاده، مانند مشاهدهٔ تاریخچهٔ یک تابع، میپردازیم.
در امضای کامیتها (Signing Commits) میبینیم چگونه از --show-signature
برای افزودن یک رشتهٔ اعتبارسنجی به هر کامیت در خروجی git log
استفاده کنیم تا مشخص شود آیا آن کامیت بهدرستی امضا شده است یا خیر.
ذخیره موقت تغییرات در گیت (git stash)
دستور git stash
برای ذخیره موقت کارهای انجامنشده (uncommitted) استفاده میشود تا بدون نیاز به کامیت کردن کار نیمهتمام روی یک شاخه، پوشهٔ کاری خود را پاکسازی کنید.
این موضوع عملاً کاملاً در ذخیره موقت و پاکسازی (Stashing and Cleaning) پوشش داده شده است.
ایجاد یا مدیریت برچسبها در گیت (git tag)
دستور git tag برای گذاشتن یک نشانهٔ دائمی روی یک نقطهٔ مشخص در تاریخچه کد استفاده میشود. عموماً از این برای مواردی مثل انتشارها (ریلیزها) استفاده میشود.
این دستور در تگ کردن (Tagging) معرفی و با جزئیات توضیح داده شده و در عمل در برچسبگذاری نسخههای خود (Tagging Your Releases) هم از آن استفاده میکنیم.
همچنین نحوهٔ ساخت یک تگ امضاشده با GPG با گزینهٔ -s و تأیید آن با گزینهٔ -v در Signing Your Work (امضای کارهای شما) پوشش داده شده است.