-
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.3 پیوست C: دستورات گیت (Git Commands) - نمونهبرداری پایهای (Basic Snapshotting)
نمونهبرداری پایهای (Basic Snapshotting)
برای جریان کاری پایهایِ صحنهبندی (staging) محتوا و commit کردن آن به تاریخچه، تنها چند دستور پایه وجود دارد.
افزودن به گیت (git add)
دستور git add
محتوا را از شاخه کاری (working directory) به ناحیهٔ صحنهبندی (یا «index») برای commit بعدی اضافه میکند.
وقتی دستور git commit
اجرا میشود، بهطور پیشفرض تنها به این ناحیهٔ صحنهبندی نگاه میکند، بنابراین از git add
برای تعیین دقیق آنچه میخواهید اسنپشات (snapshot) commit بعدی شما شبیه آن باشد استفاده میشود.
این دستور در گیت اهمیت بسیار زیادی دارد و در کتاب بارها نام برده یا استفاده شده است. ما سریعاً برخی از کاربردهای منحصربهفرد آن را که میتوان یافت، مرور خواهیم کرد.
ابتدا دستور git add
را بهطور مفصل معرفی و توضیح میدهیم (دنبال کردن فایل های جدید (Tracking New Files)).
نحوهٔ استفاده از آن برای حل تعارضهای merge را در مرج کانفیلیکت پایه (Basic Merge Conflicts) بیان میکنیم.
نحوهٔ بهکارگیری آن برای مرحلهبندی تعاملی و انتخاب تنها بخشهای مشخصی از یک فایل تغییر یافته را در مرحلهبندی تعاملی (Interactive Staging) مرور میکنیم.
در پایان، پیادهسازی سطح پایینِ آن را شبیهسازی میکنیم تا ایدهای از کارهای داخلی که پشت صحنه انجام میدهد بهدست آورید (درخت اشیاء (Tree Objects)).
وضعیت گیت (git status)
دستور git status
وضعیتهای مختلف فایلها در دایرکتوری کاری و ناحیهٔ مرحلهبندی را نشان میدهد:
کدام فایلها تغییر کرده و هنوز مرحلهبندی نشدهاند و کدامها مرحلهبندی شده ولی هنوز ثبت (commit) نشدهاند.
در حالت معمول، همچنین چند راهنمایی پایهای دربارهٔ چگونگی جابجایی فایلها بین این وضعیتها نمایش میدهد.
ابتدا status
را در بررسی وضعیت فایل های شما (Checking the Status of Your Files) پوشش میدهیم، هم فرمهای پایهای و هم فرمهای سادهشدهٔ آن.
هرچند در سراسر کتاب از آن استفاده میکنیم، عملاً هر کاری که با دستور git status
میتوانید انجام دهید در آنجا توضیح داده شده است.
(git diff)
دستور git diff
وقتی بهکار میرود که بخواهید تفاوت بین هر دو درخت (tree) را ببینید.
این میتواند تفاوت بین محیط کاری شما و ناحیهٔ مرحلهبندی (git diff
بدون آرگومان)، بین ناحیهٔ مرحلهبندی و آخرین commit شما (git diff --staged
) یا بین دو commit (git diff master branchB
) باشد.
ابتدا کاربردهای پایهٔ git diff
را در مشاهده تغییرات آماده و آمادهنشده (Viewing Your Staged and Unstaged Changes) بررسی میکنیم، جایی که نشان میدهیم چه تغییراتی مرحلهبندی شدهاند و کدامها هنوز مرحلهبندی نشدهاند.
از آن برای جستجوی احتمال مشکلات فاصلهگذاری (whitespace) پیش از commit با گزینهٔ --check
در راهنماییهای کامیت (Commit Guidelines) استفاده میکنیم.
همچنین میبینیم چگونه میتوان تفاوت بین شاخهها را مؤثرتر با نحو git diff A…B
بررسی کرد (تشخیص تغییرات ایجاد شده (Determining What Is Introduced)).
ما از آن برای فیلتر کردن اختلافهای فضای سفید با گزینه -b و برای مقایسهٔ مراحل مختلف فایلهای درگیر (conflicted) با گزینههای --theirs، --ours و --base در <<_advanced_merging>> استفاده میکنیم.
در نهایت، از آن برای مقایسهٔ مؤثر تغییرات زیرمدولها با --submodule در شروع با سابماژول ها (Starting with Submodules) استفاده میکنیم.
ابزار مقایسه تغییرات گیت (git difftool)
دستور git difftool بهسادگی یک ابزار خارجی را اجرا میکند تا تفاوت بین دو درخت را به شما نشان دهد، در صورتی که بخواهید از چیزی غیر از دستور داخلی git diff استفاده کنید.
ما فقط بهطور مختصر در مشاهده تغییرات آماده و آمادهنشده (Viewing Your Staged and Unstaged Changes) به این موضوع اشاره کردهایم.
ثبت تغییرات در گیت (git commit)
دستور git commit همهٔ محتوای فایلهایی را که با git add وارد staging شدهاند میگیرد، یک تصویر (snapshot) دائمی جدید در پایگاه داده ثبت میکند و سپس اشارهگر شاخهٔ جاری را به آن منتقل میکند.
ما ابتدا اصول پایهٔ commit کردن را در کامیت کردن تغییراتتان (Committing Your Changes) بررسی میکنیم. در آنجا نشان میدهیم چگونه با استفاده از گزینه -a میتوان در گردشهای کاری روزمره از مرحله git add صرفنظر کرد و چگونه با گزینه -m پیام commit را از خط فرمان ارسال کرد بهجای اینکه ویرایشگر باز شود.
در بازگرداندن تغییرات (Undoing Things) از گزینه --amend برای بازنویسی آخرین commit صحبت میکنیم.
در شاخهها در یک نگاه (Branches in a Nutshell) با جزئیات بیشتری توضیح میدهیم که git commit چه کاری انجام میدهد و چرا این کار را به آن شکل انجام میدهد.
ما نحوهٔ امضای رمزنگاریشدهٔ commitها با گزینه -S را در امضای کامیتها (Signing Commits) بررسی کردیم.
در نهایت، نگاهی میاندازیم به اینکه دستور git commit در پسزمینه چه کاری انجام میدهد و در عمل چگونه پیادهسازی شده است، در کامیت اشیاء (Commit Objects).
بازنشانی در گیت (git reset)
دستور `git reset` عمدتاً برای بازگرداندن تغییرات استفاده میشود، همانطور که از فعل آن هم میتوان حدس زد. این دستور اشارهگر HEAD را جابهجا میکند و در صورت نیاز میتواند index یا ناحیه استیج را تغییر دهد و همچنین در صورت استفاده از `--hard` میتواند دایرکتوری کاری را هم تغییر دهد. این گزینهٔ آخر باعث میشود در صورت استفادهٔ نادرست، امکان از دست رفتن کار شما وجود داشته باشد، پس قبل از استفاده آن را خوب بفهمید.
ما ابتدا سادهترین کاربرد git reset را در لغو آمادهسازی یک فایل آمادهشده (Unstaging a Staged File) مطرح میکنیم، جایی که از آن برای برداشتن فایلهایی که با git add به استیج اضافه کردهایم استفاده میکنیم.
سپس این دستور را با جزئیات زیادی در بازنشانی به زبان ساده (Reset Demystified) بررسی میکنیم که کاملاً به توضیح این دستور اختصاص دارد.
ما از git reset --hard
برای لغو یک merge در لغو ادغام (Aborting a Merge) استفاده میکنیم، جایی که همچنین از git merge --abort
استفاده شده است که در واقع تا حدی پوششی برای دستور git reset
است.
حذف فایل در گیت (git rm)
دستور git rm
برای حذف فایلها از ناحیه استیج و دایرکتوری کاری در گیت به کار میرود. این دستور شباهت به git add
دارد، با این تفاوت که حذف یک فایل را برای commit بعدی استیج میکند.
ما دستور git rm
را با جزئیات در حذف فایل ها (Removing Files) پوشش دادهایم، از جمله حذف بازگشتی فایلها و نیز فقط حذف فایلها از ناحیه استیج ولی باقی گذاشتن آنها در دایرکتوری کاری با گزینهٔ --cached
.
تنها کاربرد متفاوت دیگری از git rm
در کتاب در حذف اشیاء (Removing Objects) آمده است که در آن بهطور مختصر از و توضیح دادهایم که هنگام اجرای git filter-branch
از گزینهٔ --ignore-unmatch
استفاده میکنیم؛ این گزینه باعث میشود وقتی فایلی که میخواهیم حذف کنیم وجود ندارد، خطا تولید نشود. این مورد میتواند برای اهداف اسکریپتنویسی مفید باشد.
جابجایی یا تغییر نام فایل در گیت (git mv)
دستور git mv
یک دستور کمحجم و راحت برای جابهجایی فایل است که پس از جابهجایی، بهطور خودکار روی فایل جدید git add و روی فایل قدیمی git rm انجام میدهد.
ما تنها بهطور مختصر این دستور را در جا به جایی فایل ها (Moving Files) ذکر کردهایم.
پاکسازی در گیت (git clean)
دستور git clean
برای حذف فایلهای نامطلوب از شاخه کاری (working directory) شما استفاده میشود. این ممکن است شامل حذف آثار موقت ساخت (build artifacts) یا فایلهای مربوط به تداخلهای مرج (merge conflict) باشد.
ما بسیاری از گزینهها و سناریوهایی را که ممکن است از دستور clean استفاده کنید در پاکسازی شاخه کاری (Working Directory) (Cleaning your Working Directory) پوشش دادهایم.