-
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ı
5.1 Dağıtık Git - Dağıtık İş Akışları
Artık diğer geliştiricilerle ortak bir proje üzerinde çalışırken kodlarınızı paylaşmak üzere kurulmuş bir uzak Git deposuna sahipsiniz ve yerel bir iş akışında temel Git komutlarına aşina olduğunuz için, Git’in size sunduğu dağıtık iş akışlarını nasıl kullanacağınıza bakacaksınız.
Bu bölümde, dağıtık bir ortamda bir katkı sağlayıcı ve proje yöneticisi olarak Git ile nasıl çalışılacağını göreceksiniz. Yani, bir projeye başarılı bir şekilde kod eklemeyi ve hem siz hem de proje yürütücüsü için sürecin mümkün olduğunca kolay olmasını sağlamayı öğreneceksiniz. Ayrıca birçok geliştiricinin katkıda bulunduğu bir projeyi başarılı bir şekilde sürdürmeyi de öğreneceksiniz.
Dağıtık İş Akışları
Merkezi Sürüm Denetim Sistemleri (CVCS) ile karşılaştırıldığında, Git’in dağıtık yapısı, geliştiricilerin projelerde nasıl işbirliği yapacakları konusunda çok daha esnek olmalarını sağlar. Merkezi sistemlerde, her geliştirici merkezi bir dağıtım göbeğiyle (hub) neredeyse eşit olarak çalışan bir düğümdür (node). Ancak, Git’te her geliştirici potansiyel olarak hem bir düğüm hem de bir göbektir: yani, her geliştirici hem diğer repolara kod katkısında bulunabilir, hem de diğerlerinin çalışmalarını temel alabilecekleri ve katkıda bulunabilecekleri bir açık repoyu yürütebilir. Bu, projeniz ve/veya ekibiniz için geniş bir olası iş akışı yelpazesi sunar, bu esneklikten faydalanabileceğiniz birkaç yaygın paradigmayı ele alacağız. Her tasarımın güçlü yanlarını ve olası zayıflıklarını inceleyeceğiz. Kullanım amacıyla bunlardan tek birini seçebilir veya her birinden özellikleri bazı özellikleri alarak bir karma elde edebilirsiniz.
Merkezi İş Akışları
Merkezi sistemlerde genellikle tek bir işbirliği modeli bulunur: merkezi iş akışı. Merkezi bir dağıtım göbeği veya repo, kodları kabul edebilir ve herkes çalışmalarını onunla eşitler. Geliştiriciler (o göbeğin tüketicileri olan) düğümlerdir ve işlerini bu merkezi konumla eşitlerler.
Bunun anlamı, iki geliştiricinin göbekten (hub/repo) kopyaladığı ve her ikisinin de değişiklikler yaptığı durumda, değişikliklerini ilk gönderen birinci geliştiricinin bunu herhangi bir sorun yaşamadan yapabileceğidir. İkinci geliştirici değişiklikleri göndermeden önce, birinci geliştiricinin çalışmasını birleştirmelidir. Böylece birinci geliştiricinin değişikliklerini üzerine yazmamış olur. Bu kavram, Subversion (veya herhangi bir başka CVCS) gibi Git’te de geçerlidir ve bu model Git’te mükemmel bir şekilde çalışır.
Şirketiniz veya ekibinizde merkezi iş akışından zaten memnunsanız, Git’i kullanarak bu iş akışını kolayca sürdürebilirsiniz. Tek bir repo kurun ve ekibinizdeki herkese itme erişimi verin. Git kullanıcıların birbirlerinin üstüne yazmasına izin vermez.
Ahmet ve Mehmet’in aynı anda çalışmaya başladıklarını varsayalım. Ahmet değişikliğini tamamlar ve onu sunucuya iter. Sonra Mehmet değişikliklerini iterlemeye çalışır, ancak sunucu bunları reddeder. Ona, ileri alınmayan değişikliklerini iterlemeye çalıştığı ve bunu yapamayacağı söylenir, çünkü önce çekme ve birleştirme yapması gerekmektedir. Bu iş akış modeli, birçok insanın aşina olduğu ve rahat hissettiği bir kavram olduğu için çoğu kişiye çekici gelir.
Bu sadece küçük ekiplerle sınırlı değildir. Git’in dallanma modeliyle, yüzlerce geliştiricinin aynı anda onlarca dal üzerinde başarılı bir şekilde çalışması mümkündür.
Birleşme Yöneticisi İş Akışı
Çünkü Git, birden çok uzak repoya sahip olmanıza izin verir ve her geliştiricinin kendi açık reposuna yazma erişimi ve diğer herkesin okuma erişiminin olduğu bir iş akışına sahip olmanız mümkündür. Bu senaryo genellikle, "resmi" projeyi temsil eden kanonik bir repo içerir. Bu projeye katkıda bulunmak için, projenin kendi açık kopyanızı oluşturur ve değişikliklerinizi ona itersiniz. Daha sonra, ana projenin bakıcısına değişikliklerinizi çekmesi için bir istek gönderebilirsiniz. Proje yürütücüsü daha sonra; reponuzu bir uzak repo olarak ekleyebilir, değişikliklerinizi yerel olarak test edebilir, bunları kendi dalına birleştirebilir ve reposuna geri itebilir. İşlem şu şekilde çalışır:
Süreç şöyle ilerler (bkz Birleşme yöneticisi iş akışı.):
-
Proje yürütücüsü kendi acık reposuna iter.
-
Bir katkılayıcı bu repoyu kopyalar ve değişiklikler yapar.
-
Katkılayıcı bunu kendi açık kopyasına iter.
-
Katkılayıcı yürütücüye değişiklikleri çekmesi için bir e-posta gönderir.
-
Yürütücü katkıcının reposunu bir uzak repo olarak ekler ve yerel olarak birleştirir.
-
Yürütücü birleştirilen değişiklikleri ana repoya iter.
Bu, GitHub veya GitLab gibi dağıtım-göbeği tabanlı araçlarla çok yaygın bir iş akışıdır. Burada bir projeyi çatallamak (dal açmak) ve değişikliklerinizi herkesin görebilmesi için dalınıza itmek çok kolaydır. Bu yaklaşımın başlıca avantajlarından biri, ana repo yürütücüsünün herhangi bir zamanda değişikliklerinizi alabilmesidir. Katkılayıcılar değişikliklerinin projeye dahil edilmesini beklemek zorunda değillerdir: her taraf kendi hızında çalışabilir.
Diktatör ve Yardımcılar İş Akışı
Bu, çoklu repo iş akışının bir türüdür. Genellikle, Linux çekirdeği gibi, yüzlerce katılımcısı olan büyük projeler tarafından kullanılır. Çeşitli birleşim yöneticileri belirli repo parçalarından sorumludur ve bunlara yardımcılar denir. Tüm yardımcılar, "benevolent dictator" (yardımsever diktatör) olarak bilinen bir birleşim yöneticisine sahiptir. Tüm yardımcıların bu yardımsever diktatörün kendi dizininden referans repoya ittiği kodu çekmesi gereklidir. Süreç şöyle işler (bkz. Yardımsever diktatör iş akışı.):
-
Normal geliştiriciler tematik dallarda çalışır ve çalışmalarını
master
üzerine temeller.master
dalı yöneticinin ittiği referans reposunun dalıdır. -
Yardımcılar, geliştiricilerin konu dallarını kendi
master
dallarına birleştirir. -
Diktatör, yardımcıların
master
dallarını kendimaster
dalına birleştirir. -
Son olarak, diktatör bu
master
dalını referans reposuna iter, böylece diğer geliştiriciler bunun üzerine temelleme yapabilir.
Bu tür bir iş akışı yaygın değildir, ancak çok büyük projelerde veya yüksek derecede hiyerarşik ortamlarda faydalı olabilir. Proje liderine (diktatöre) projenin büyük kısmını devretmesine ve bunları birleştirmeden önce bir çok noktada geniş kod altkümeleri toplamasına olanak tanır.
İş Akışı Özeti
Bunlar, Git gibi bir dağıtılmış sistemle mümkün olan bazı yaygın olarak kullanılan iş akışlarıdır, ancak gördüğünüz gibi, gerçek dünya iş akışınıza uyacak şekilde birçok değişiklik yapılabilir. Umarım artık sizin için hangi iş akışı karmasının daha uygun olduğunu belirleyebilirsiniz.
Bir sonraki bölümde bir projeye katkıda bulunmanın ana örüntüleri hakkında daha fazla bilgi sahibi olacak ve farklı iş akışları oluşturmak için ana rollerini nasıl gerçekleştireceğiniz hakkında daha belirgin örnekler göreceksiniz.