-
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)
A2.4 پیوست B: گنجاندن گیت در برنامههای شما (Embedding Git in your Applications) - کتابخانه گیت برای زبان Go (go-git)
کتابخانه گیت برای زبان Go (go-git)
اگر میخواهید Git را در یک سرویس نوشتهشده با Golang ادغام کنید، یک پیادهسازی کامل به زبان Go نیز وجود دارد. این پیادهسازی هیچ وابستگی بومی (native) ندارد و بنابراین در معرض خطاهای مدیریت حافظه دستی نیست. همچنین برای ابزارهای استاندارد تحلیل عملکرد Golang مانند پروفایلر CPU، پروفایلر حافظه، و race detector شفاف است.
go-git بر قابلیت توسعه (extensibility) و سازگاری تمرکز دارد و از بیشتر APIهای سطح پایین (plumbing) پشتیبانی میکند، که مستندات آن در https://github.com/go-git/go-git/blob/master/COMPATIBILITY.md موجود است.
در اینجا یک مثال ساده از استفاده از APIهای Go آمده است:
import "github.com/go-git/go-git/v5"
r, err := git.PlainClone("/tmp/foo", false, &git.CloneOptions{
URL: "https://github.com/go-git/go-git",
Progress: os.Stdout,
})
به محض اینکه یک نمونه Repository
داشته باشید، میتوانید اطلاعات را دسترسی پیدا کرده و تغییرات موردنظر را روی آن اعمال کنید:
// retrieves the branch pointed by HEAD
ref, err := r.Head()
// get the commit object, pointed by ref
commit, err := r.CommitObject(ref.Hash())
// retrieves the commit history
history, err := commit.History()
// iterates over the commits and print each
for _, c := range history {
fmt.Println(c)
}
قابلیتهای پیشرفته (Advanced Functionality)
go-git دارای چند ویژگی پیشرفته قابل توجه است، یکی از آنها سیستم ذخیرهسازی قابل افزونه (pluggable storage) است، مشابه backendهای Libgit2. پیادهسازی پیشفرض، ذخیرهسازی در حافظه (in-memory) است که بسیار سریع است.
r, err := git.Clone(memory.NewStorage(), nil, &git.CloneOptions{
URL: "https://github.com/go-git/go-git",
})
سیستم ذخیرهسازی قابل افزونه گزینههای جالبی ارائه میدهد. برای مثال، https://github.com/go-git/go-git/tree/master/_examples/storage امکان ذخیره رفرنسها، اشیاء و تنظیمات در یک پایگاه داده Aerospike را فراهم میکند.
ویژگی دیگر، انتزاع انعطافپذیر سیستم فایل (flexible filesystem abstraction) است. با استفاده از https://pkg.go.dev/github.com/go-git/go-billy/v5?tab=doc#Filesystem میتوان همه فایلها را به روشهای مختلف ذخیره کرد، مثلاً با فشردهسازی همه در یک آرشیو روی دیسک یا نگهداری همه در حافظه.
یک کاربرد پیشرفته دیگر، کلاینت HTTP قابل تنظیم دقیق است، مانند نمونه موجود در https://github.com/go-git/go-git/blob/master/_examples/custom_http/main.go.
customClient := &http.Client{
Transport: &http.Transport{ // accept any certificate (might be useful for testing)
TLSClientConfig: &tls.Config{InsecureSkipVerify: true},
},
Timeout: 15 * time.Second, // 15 second timeout
CheckRedirect: func(req *http.Request, via []*http.Request) error {
return http.ErrUseLastResponse // don't follow redirect
},
}
// Override http(s) default protocol to use our custom client
client.InstallProtocol("https", githttp.NewClient(customClient))
// Clone repository using the new client if the protocol is https://
r, err := git.Clone(memory.NewStorage(), nil, &git.CloneOptions{URL: url})
مطالعه بیشتر (Further Reading)
بررسی کامل قابلیتهای go-git خارج از محدوده این کتاب است. برای اطلاعات بیشتر در مورد go-git، مستندات API در https://pkg.go.dev/github.com/go-git/go-git/v5 و مجموعهای از مثالهای کاربردی در https://github.com/go-git/go-git/tree/master/_examples در دسترس هستند.