-
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)
A1.1 پیوست A: گیت در محیطهای دیگر (Git in Other Environments) - رابط های گرافیکی (Graphical Interfaces)
رابط های گرافیکی (Graphical Interfaces)
محیط اصلی Git در terminal است. ویژگیهای جدید ابتدا در آنجا ظاهر میشوند و تنها در command line است که تمام قدرت Git در اختیار شما قرار دارد. اما متن ساده همیشه بهترین گزینه نیست؛ گاهی به یک نمایش visual نیاز دارید و برخی کاربران با point-and-click interface راحتتر هستند.
نکته مهم این است که رابطهای مختلف برای workflowهای مختلف طراحی شدهاند.
بعضی کلاینتها فقط یک زیرمجموعهی انتخابشده از قابلیتهای Git را ارائه میدهند تا یک روش مشخص کار را (که نویسنده مؤثر میداند) پشتیبانی کنند.
از این منظر، هیچیک از این ابزارها «بهتر
» از دیگری نیستند؛ بلکه صرفاً متناسبتر با هدف موردنظر ساخته شدهاند.
همچنین توجه داشته باشید که هیچیک از این graphical clients کاری فراتر از command-line client نمیکنند؛ command-line همچنان جایی است که بیشترین قدرت و کنترل را روی repositories خواهید داشت.
رابطهای گرافیکی گیت (gitk و git-gui) (gitk
and git-gui
)
زمانی که Git را نصب میکنید، ابزارهای گرافیکی آن یعنی gitk
و git-gui
هم نصب میشوند.
gitk
یک graphical history viewer است.
میتوانید آن را مانند یک GUI shell قدرتمند روی git log
و git grep
در نظر بگیرید.
این ابزار زمانی کاربرد دارد که بخواهید چیزی را در گذشته پیدا کنید یا تاریخچه پروژه خود را visualize کنید.
اجرای gitk از command-line سادهترین راه است.
کافیست با cd
وارد یک Git repository شوید و تایپ کنید:
$ gitk [git log options]
gitk بسیاری از command-line options را میپذیرد که اغلب به دستور زیربنایی git log
ارسال میشوند.
یکی از پرکاربردترین آنها --all
است، که باعث میشود gitk تمام commits قابل دسترس از هر ref (نه فقط HEAD) را نمایش دهد.
رابط گرافیکی gitk به این شکل است:

gitk
history viewer-
بالای صفحه شبیه خروجی
git log --graph
است؛ هر نقطه یک commit را نشان میدهد، خطوط رابطه parentها را مشخص میکنند، و refs به صورت باکسهای رنگی نمایش داده میشوند. -
نقطه زرد نشاندهنده HEAD و نقطه قرمز نشاندهنده تغییراتی است که هنوز به commit تبدیل نشدهاند.
-
پایین صفحه نمایی از commit انتخابشده است؛ در سمت چپ comments و patch نمایش داده میشوند و در سمت راست یک summary view قرار دارد.
-
بین این دو بخش مجموعهای از کنترلها برای جستوجوی تاریخچه وجود دارد.
در مقابل، git-gui
ابزاری است که عمدتاً برای ساختن commits به کار میرود.
اجرای آن نیز مثل gitk از command-line سادهتر است:
$ git gui
و به این شکل خواهد بود:

git-gui
commit toolدر سمت چپ بخش index قرار دارد؛ تغییرات unstaged در بالا و تغییرات staged در پایین نمایش داده میشوند. میتوانید با کلیک روی آیکون فایلها، کل فایلها را بین این دو حالت جابهجا کنید، یا با کلیک روی نام یک فایل، آن را برای مشاهده انتخاب کنید.
بالا سمت راست، بخش diff view قرار دارد که تغییرات فایل انتخابشده را نشان میدهد. میتوانید hunkهای فردی یا حتی خطوط تکی را با right-click در این بخش stage کنید.
پایین سمت راست بخش پیام و عملیات است.
پیام خود را در text box وارد کنید و روی “Commit” کلیک کنید تا عملی مشابه git commit
انجام شود.
همچنین میتوانید با انتخاب گزینه “Amend”، last commit را اصلاح کنید؛ این کار باعث میشود بخش “Staged Changes” با محتوای commit قبلی بهروز شود.
سپس میتوانید تغییراتی را stage یا unstage کنید، پیام commit را تغییر دهید و دوباره روی “Commit” کلیک کنید تا commit قدیمی با commit جدید جایگزین شود.
gitk
و git-gui
نمونههایی از ابزارهای task-oriented هستند.
هر یک برای یک هدف مشخص طراحی شدهاند (viewing history و creating commits بهترتیب) و ویژگیهای غیرضروری برای آن کار را حذف کردهاند.
گیت هاب برای مک و ویندوز (GitHub for macOS and Windows)
GitHub دو workflow-oriented Git client ساخته است: یکی برای Windows و دیگری برای macOS. این کلاینتها نمونهای از ابزارهای workflow-oriented هستند؛ به جای نمایش همه قابلیتهای Git، روی مجموعهای انتخابشده از ویژگیهای پرکاربرد که به خوبی با هم کار میکنند، تمرکز دارند.


ظاهر این کلاینتها بسیار مشابه است، بنابراین در این فصل آنها را به عنوان یک محصول واحد بررسی میکنیم. ما مرور جزئی و دقیق ابزارها را انجام نمیدهیم (مستندات جداگانه دارند)، اما یک تور سریع از بخش “changes” که بیشتر وقت خود را در آن خواهید گذراند، ارائه میکنیم:
-
سمت چپ: لیست repositories که کلاینت دنبال میکند؛ میتوانید با کلیک روی آیکون “+” یک repository اضافه کنید (چه با clone چه بهصورت محلی).
-
وسط: بخش ورودی commit message و انتخاب فایلها برای اضافه شدن به commit.
-
در Windows، تاریخچه commit دقیقاً زیر این بخش نمایش داده میشود.
-
در macOS در یک تب جداگانه قرار دارد.
-
-
سمت راست: diff view که نشان میدهد چه تغییراتی در working directory رخ داده یا چه تغییراتی در commit انتخابشده وجود دارد.
-
آخرین مورد: دکمه “Sync” در بالا سمت راست که روش اصلی تعامل با شبکه است.
یادداشت
|
برای استفاده از این ابزارها نیازی به حساب GitHub ندارید. در حالی که این ابزارها برای نمایش سرویس GitHub و جریان کاری پیشنهادی آن طراحی شدهاند، بهراحتی با هر مخزنی کار میکنند و میتوانند عملیات شبکهای را با هر میزبان Git انجام دهند. |
نصب (Installation)
GitHub برای ویندوز و macOS را میتوانید از https://desktop.github.com/ دانلود کنید. وقتی این برنامهها برای اولین بار اجرا میشوند، شما را از طریق تنظیمات اولیه Git راهنمایی میکنند، مانند پیکربندی نام و آدرس ایمیل، و هر دو برای بسیاری از گزینههای رایج پیکربندی، مانند کشهای اعتبارسنجی و رفتار CRLF، مقادیر پیشفرض منطقی ایجاد میکنند.
هر دو نسخه "همیشه بهروز" هستند – بهروزرسانیها در پسزمینه و در زمانی که برنامهها باز هستند دانلود و نصب میشوند. این شامل نسخهٔ بستهبندیشدهای از Git نیز میشود که به این معنی است احتمالاً دیگر نیازی به نگرانی درباره بهروزرسانی دستی آن نخواهید داشت. در ویندوز، کلاینت میانبری برای راهاندازی PowerShell با Posh-git دارد که بعداً در این فصل بیشتر دربارهاش صحبت خواهیم کرد.
گام بعدی این است که ابزار را با چند مخزن تغذیه کنید. کلاینت فهرستی از مخزنهایی که در GitHub به آنها دسترسی دارید نشان میدهد و میتواند آنها را در یک مرحله کلون کند. اگر از قبل یک مخزن محلی دارید، کافی است پوشهٔ آن را از Finder یا Windows Explorer به پنجرهٔ کلاینت GitHub بکشید تا در فهرست مخازن در سمت چپ قرار بگیرد.
جریان کاری پیشنهادی (Recommended Workflow)
پس از نصب و پیکربندی، میتوانید از کلاینت GitHub برای بسیاری از کارهای رایج Git استفاده کنید. جریان کاری موردنظر برای این ابزار گاهی اوقات «GitHub Flow» نامیده میشود. ما این را با جزئیات بیشتر در روند کاری گیتهاب (The GitHub Flow) پوشش میدهیم، اما خلاصهٔ کلی این است که (الف) شما تغییرات را در یک شاخه ثبت (commit) میکنید و (ب) نسبتاً منظم با مخزن راه دور همگامسازی میشوید.
مدیریت شاخهها یکی از زمینههایی است که دو ابزار در آن تفاوت دارند. در macOS، دکمهای در بالای پنجره برای ایجاد شاخهٔ جدید وجود دارد:

در ویندوز، این کار با وارد کردن نام شاخهٔ جدید در ابزارِ تغییر شاخه انجام میشود:

پس از ایجاد شاخه، ایجاد کامیتهای جدید نسبتاً ساده است. در پوشهٔ کاریتان تغییراتی بدهید، و وقتی به پنجرهٔ کلاینت گیتهاب برمیگردید، به شما نشان میدهد کدام فایلها تغییر کردهاند. یک پیامِ کامیت وارد کنید، فایلهایی را که میخواهید شامل شوند انتخاب کنید، و روی دکمهٔ «Commit» کلیک کنید (Ctrl+Enter یا ⌘-Enter).
روش اصلی تعامل شما با مخازن دیگر از طریق شبکه، ویژگی «Sync» است. گیت بهصورت داخلی عملیاتهای مجزایی برای push، fetch، merge و rebase دارد، اما کلاینتهای گیتهاب همهٔ اینها را در یک ویژگی چندمرحلهای خلاصه میکنند. وقتی روی دکمهٔ Sync کلیک میکنید، این اتفاق میافتد:
-
git pull --rebase. اگر این بهخاطر وجود تعارضِ مرج شکست خورد، به git pull --no-rebase برمیگردد.
-
git push.
این متداولترین توالی دستورات شبکهای هنگام کار به این سبک است، بنابراین فشردهسازی آنها در یک فرمان، زمان زیادی صرفهجویی میکند.
خلاصه (Summary)
این ابزارها برای جریان کاری که برای آن طراحی شدهاند بسیار مناسباند. برنامهنویسان و غیرِ برنامهنویسان میتوانند ظرفِ چند دقیقه روی یک پروژه با هم همکاری کنند، و بسیاری از بهترین شیوهها برای این نوع جریانِ کاری در خودِ ابزارها جاافتادهاند. با این حال، اگر جریانِ کاری شما متفاوت است یا میخواهید کنترل بیشتری روی چگونگی انجام و زمانبندی عملیات شبکهای داشته باشید، پیشنهاد میکنیم از یک کلاینت دیگر یا خط فرمان استفاده کنید.
سایر رابطهای گرافیکی (Other GUIs)
تعداد زیادی کلاینت گرافیکی گیت وجود دارد که از ابزارهای تخصصی و تکمنظوره تا برنامههایی که سعی میکنند همهٔ قابلیتهای گیت را ارائه دهند، را شامل میشوند. وبسایت رسمی گیت فهرستِ انتخابشدهای از محبوبترین کلاینتها را در https://git-scm.com/downloads/guis دارد. فهرست کاملتری در ویکی گیت در آدرس https://archive.kernel.org/oldwiki/git.wiki.kernel.org/index.php/Interfaces,_frontends,_and_tools.html#Graphical_Interfaces موجود است.