-
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)
10.1 (Git Internals) - ابزارها و دستورات سطح پایین (Plumbing and Porcelain)
ممکن است این فصل را مستقیماً از فصلی بسیار قبلی باز کرده باشید، یا اینکه پس از خواندن ترتیبی کل کتاب تا اینجا به آن رسیدهاید — در هر صورت، اینجا قرار است به سازوکارهای درونی و پیادهسازی گیت بپردازیم. ما دیدیم که فهم این اطلاعات برای درک اهمیت و توانمندی گیت بنیادی است، اما برخی دیگر به ما گفتهاند که برای مبتدیان میتواند گیجکننده و بیجهت پیچیده باشد. بنابراین، این بحث را به عنوان آخرین فصل کتاب قرار دادهایم تا بتوانید آن را زود یا دیر در روند یادگیریتان بخوانید. تصمیم با شماست.
حالا که اینجا هستید، بیایید شروع کنیم. ابتدا، اگر هنوز برایتان روشن نیست، گیت بنیاداً یک سیستم فایل آدرسدهی بر اساس محتوا است که یک رابط کاربری کنترل نسخه (VCS) روی آن قرار گرفته است. کمی بعد بیشتر در مورد معنای این جمله خواهید آموخت.
در روزهای نخستین گیت (عمدتاً پیش از نسخهٔ 1.5)، رابط کاربری بسیار پیچیدهتر بود چون بیشتر آن سیستم فایل را برجسته میساخت تا یک VCS پالایششده. در چند سال اخیر، رابط کاربری تا حدی تصحیح شده که اکنون به اندازهٔ هر سیستم دیگری تمیز و آسان برای استفاده است؛ با این حال، کلیشهٔ رابط کاربری اولیهٔ گیت که پیچیده و دشوار برای یادگیری بود، همچنان پابرجاست.
لایهٔ سیستم فایل آدرسدهیشده بر اساس محتوا فوقالعاده جالب است، بنابراین ابتدا آن را در این فصل پوشش میدهیم؛ سپس دربارهٔ سازوکارهای انتقال و کارهای نگهداری مخزن که ممکن است نهایتاً با آنها سروکار داشته باشید، خواهید آموخت.
ابزارها و دستورات سطح پایین (Plumbing and Porcelain)
این کتاب عمدتاً به این موضوع میپردازد که چگونه میتوان با حدود ۳۰ زیرفرمان اصلی گیت مانند checkout
، branch
، remote
و … کار کرد.
اما باید توجه داشت که گیت در ابتدا بهعنوان یک جعبهابزار (toolkit) برای مدیریت نسخه طراحی شد، نه یک سیستم کنترل نسخه (VCS) کامل و کاربرپسند. به همین دلیل، بخشی از زیرفرمانهای آن عملیات سطحپایین انجام میدهند و برای استفاده در زنجیرههای یونیکسی (Unix pipelines) یا فراخوانی از اسکریپتها ساخته شدهاند.
همانطور که احتمالاً تا حالا متوجه شدهاید، نه فصل اول این کتاب تقریباً منحصراً با فرمانهای لعاب سروکار دارند. اما در این فصل بیشتر با فرمانهای سطحپایینِ لولهکشی سروکار خواهید داشت، زیرا آنها دسترسی به سازوکار درونی گیت را فراهم میکنند و به نشان دادن این که گیت چگونه و چرا کارهایش را انجام میدهد کمک میکنند. بسیاری از این فرمانها قرار نیست بهصورت دستی در خط فرمان استفاده شوند، بلکه به عنوان بلوکهای سازنده برای ابزارهای جدید و اسکریپتهای سفارشی به کار میروند.
وقتی در یک دایرکتوری جدید یا موجود git init
اجرا میکنید، گیت دایرکتوری .git
را ایجاد میکند که تقریباً همه چیزهایی را که گیت ذخیره و دستکاری میکند در آن قرار دارد.
اگر بخواهید مخزن خود را پشتیبانگیری یا کلون کنید، کپی کردن این تک دایرکتوری به مکان دیگری تقریباً همه چیز مورد نیازتان را در اختیارتان میگذارد.
کل این فصل اساساً به آنچه در این دایرکتوری میتوانید ببینید میپردازد.
در اینجا نمایی از آنچه معمولاً یک دایرکتوری تازهسازیشده .git
به نظر میرسد آمده است:
$ ls -F1
config
description
HEAD
hooks/
info/
objects/
refs/
بسته به نسخهی گیت شما، ممکن است محتوای اضافی دیگری در آنجا ببینید، اما این یک مخزن تازهساختهشده با دستور git init
است — همان چیزی که بهطور پیشفرض میبینید.
فایل description
تنها توسط برنامهی GitWeb استفاده میشود، پس نگران آن نباشید.
فایل config
شامل گزینههای پیکربندی مخصوص پروژهی شماست و دایرکتوری info
یک فایل استثنا (global exclude) نگه میدارد برای الگوهای نادیدهگرفتن که نمیخواهید در فایل .gitignore
پیگیری شوند.
دایرکتوری hooks
اسکریپتهای هوک سمت کلاینت یا سرور شما را در خود دارد که بهصورت مفصل در هوکهای Git (Git Hooks) توضیح داده شدهاند.
اینجا چهار ورودی مهم باقی میماند: فایلهای HEAD
و (هنوز ساختهنشده) index
، و دایرکتوریهای objects
و refs
.
اینها اجزای اصلی گیت هستند.
دایرکتوری objects
تمام محتوای پایگاه دادهی شما را ذخیره میکند، دایرکتوری refs
اشارهگرهایی به آبجکتهای commit در آن دادهها را نگه میدارد (شاخهها، تگها، ریموتها و غیره)، فایل HEAD
به شاخهای که در حال حاضر چکاوت شده اشاره میکند، و فایل index
جایی است که گیت اطلاعات ناحیهی آمادهسازی (staging area) را در آن ذخیره میکند.
اکنون هر یک از این بخشها را با جزئیات بیشتری بررسی خواهید کرد تا ببینید گیت چگونه کار میکند.