Git
Chapters ▾ 2nd Edition

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.

scroll-to-top