-
1. Başlangıç
- 1.1 Sürüm Denetimi
- 1.2 Git’in Kısa Tarihçesi
- 1.3 Git Nedir?
- 1.4 Komut Satırı
- 1.5 Git’i Yüklemek
- 1.6 Git’i İlk Defa Kurmak
- 1.7 Yardım Almak
- 1.8 Özet
-
2. Git Temelleri
-
3. Git Dalları
- 3.1 Dallar
- 3.2 Kısaca Dallandırma ve Birleştirme Temelleri
- 3.3 Dal Yönetimi
- 3.4 İş Akışı Dallandırması
- 3.5 Uzak Dallar
- 3.6 Yeniden Temelleme (rebase)
- 3.7 Özet
-
4. Bir Sunucuda Git Kurma
- 4.1 İletişim Kuralları (Protocols)
- 4.2 Bir Sunucuda Git Kurma
- 4.3 SSH Ortak Anahtarınızı Oluşturma
- 4.4 Sunucu Kurma
- 4.5 Git Cini (Daemon)
- 4.6 Akıllı HTTP
- 4.7 GitWeb
- 4.8 GitLab
- 4.9 Üçüncü Taraf Barındırma (Hosting) Seçenekleri
- 4.10 Özet
-
5. Dağıtık Git
- 5.1 Dağıtık İş Akışları
- 5.2 Projenin Gelişiminde Rol Almak
- 5.3 Bir Projeyi Yürütme
- 5.4 Özet
-
6. GitHub
- 6.1 Bir Projeye Katkıda Bulunmak
- 6.2 Proje Bakımı
- 6.3 Kurumsal Yönetim
- 6.4 GitHub’ı otomatikleştirme
- 6.5 Özet
-
7. Git Araçları
- 7.1 Düzeltme Seçimi
- 7.2 Etkileşimli İzlemleme (Staging)
- 7.3 Saklama ve Silme
- 7.4 Çalışmanızı İmzalama
- 7.5 Arama
- 7.6 Geçmişi Yeniden Yazma
- 7.7 Reset Komutunun Gizemleri
- 7.8 İleri Seviye Birleştirme
- 7.9 Rerere
- 7.10 Git’le Hata Ayıklama
- 7.11 Alt Modüller
- 7.12 Demetleme (Bundling)
- 7.13 Git Nesnesini Değiştirme
- 7.14 Kimlik Bilgisi Depolama
- 7.15 Özet
-
8. Git’i Özelleştirmek
- 8.1 Git Yapılandırması
- 8.2 Git Nitelikleri
- 8.3 Git Kancaları (Hooks)
- 8.4 Bir Örnek: Mecburi Git Politikası
- 8.5 Özet
-
9. Git ve Diğer Sistemler
- 9.1 İstemci Olarak Git
- 9.2 Git’e Geçiş
- 9.3 Özet
-
10. Dahili Git Ögeleri
- 10.1 Tesisat ve Döşeme (Plumbing ve Porcelain)
- 10.2 Git Nesneleri
- 10.3 Git Referansları
- 10.4 Packfiles
- 10.5 Refspec
- 10.6 Transfer Protokolleri
- 10.7 Bakım ve Veri Kurtarma
- 10.8 Ortam Değişkenleri
- 10.9 Özet
-
A1. Ek bölüm A: Diğer Ortamlarda Git
- A1.1 Görsel Arayüzler
- A1.2 Visual Studio ile Git
- A1.3 Visual Studio Code ile Git
- A1.4 Eclipse ile Git
- A1.5 Sublime Text ile Git
- A1.6 Bash ile Git
- A1.7 Zsh ile Git
- A1.8 PowerShell ile Git
- A1.9 Özet
-
A2. Ek bölüm B: Git’i Uygulamalarınıza Gömmek
- A2.1 Git Komut Satırı
- A2.2 Libgit2
- A2.3 JGit
- A2.4 go-git
- A2.5 Dulwich
-
A3. Ek bölüm C: Git Komutları
- A3.1 Kurulum ve Yapılandırma Komutları
- A3.2 Proje Oluşturma Komutları
- A3.3 Kısaca Poz (Snapshot) Alma
- A3.4 Dallandırma ve Birleştirme Komutları
- A3.5 Projeleri Paylaşma ve Güncelleme Komutları
- A3.6 İnceleme ve Karşılaştırma Komutları
- A3.7 Hata Ayıklama (Debugging) Komutları
- A3.8 Yamalama (Patching)
- A3.9 E-Posta Komutları
- A3.10 Harici Sistemler
- A3.11 Yönetim
- A3.12 Tesisat (Plumbing) Komutları
A2.4 Ek bölüm B: Git’i Uygulamalarınıza Gömmek - go-git
go-git
Git’i Golang’da yazılmış bir hizmete entegre etmek istiyorsanız, Pure Go kütüphanesi uygulamasını kullanabilirsiniz. Bu uygulamanın yerel bağımlılıkları yoktur ve bu nedenle manuel bellek yönetimi hatalarına eğilimli değildir. Ayrıca CPU, bellek profilleri, yarış dedektörü vb. Gibi standart Golang Performans Analizi takımları için şeffaftır.
go-git, genişletilebilirlik, uyumluluk ve çoğu tesisat API’sini destekleme odaklıdır ve bunların kılavuzlarına https://github.com/src-d/go-git/blob/master/COMPATIBILITY.md adresinden ulaşabilirsiniz.
İşte Go API’leri kullanımına temel bir örnek:
import "gopkg.in/src-d/go-git.v4"
r, err := git.PlainClone("/tmp/foo", false, &git.CloneOptions{
URL: "https://github.com/src-d/go-git",
Progress: os.Stdout,
})
Repository
reposunun bir örneğine ulaştığınnızda, bilgilere erişebilir ve üzerinde değişiklik yapabilirsiniz:
// 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)
}
Gelişmiş İşlevsellik
go-git’in dikkate değer bir kaç ileri seviye özelliği vardır; bunlardan birisi Libgit2 backend’lerine benzer olan taşınabilir bir depolama sistemine sahip olmasıdır. Varsayılan uygulama, çok hızlı olan bellek içi depolama alanıdır.
r, err := git.Clone(memory.NewStorage(), nil, &git.CloneOptions{
URL: "https://github.com/src-d/go-git",
})
Plaggable depolama birçok ilginç seçenek sunar. Örneğin, https://github.com/src-d/go-git/tree/master/_examples/storage size referansları, nesneleri ve yapılandırmayı bir Aerospike veritabanında depolama olanağı sağlar.
Başka bir özelliği esnek bir dosya sistemi soyutlamasına sahip olmasıdır. Https://godoc.org/github.com/src-d/go-billy#filesystem[] kullanarak tüm dosyaları farklı şekilde saklamak (örneğin hepsini diskte tek bir arşivde tutarak veya hepsini bellek içinde paketleyerek) kolaydır.
Başka bir gelişmiş kullanımı ise https://github.com/src-d/go-git/blob/master/_examples/costom_http/main.go adresinde bulunan ince ayarlanabilir bir HTTP istemcisi içerir.
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})
İleri Okumalar
go-git’in yeteneklerinin tamamına yer vermek bu kitabın kapsamı dışındadır. go-git hakkında daha fazla bilgi istiyorsanız, https://godoc.org/gopkg.in/src-d/go-git.v4 adresindeki API kılavuzunu ve https://github.com/src-d/go-git/tree/master/_examples adresindeki bir dizi kullanım örneğini inceleyebilirsiniz.