geri

Git-flow: Yazılım geliştirme sürecinin anatomisi

19/08/2012

Başarılı bir Git dallanma modeli

Her şey 5 Ocak 2010 tarihinde yazılan "A successful Git branching model" (Başarılı bir Git dallanma modeli) başlıklı yazı ile başladı. Bu yazıda @nvie, git depolarını derli toplu tutmak adına bir model önerdi. Sonrasında bu modeli kullanmayı oldukça kolaylaştıran git eklentilerini içeren git-flow isimli bir proje yayınladı.

Bu yazımda Git-flow modelini kısaca açıkladıktan sonra modeli gerçeklemeyi sağlayan git komutlarını ve bu işleri çok daha kolay hale getiren Git-flow eklentilerini irdelemeye çalışacağım. Son olarak ise SourceTree 1.5 ile gelen Git-flow kolaylıklarına kısaca değineceğim.

Model

Git-flow modelinin altında Git sürüm kontrol sistemi yer alıyor. Bir başka deyişle modelin tüm aşamalarını Git komutlarıyla gerçekleştirmek mümkün. Git'in sağladığı neredeyse sıfır maliyetli dallanma ve tekrar birleştirme özellikleri aşağıdaki resimde genel olarak anlatmaya çalıştığım modelin temelini oluşturuyor.

Ana dallarımız olan develop ve master dalları hayatlarına sonsuza dek(en azından proje süresince) devam edecekler. master dalında her zaman production-ready(yayına alınabilir) kod bulunurken develop dalında bir sonraki sürüm için yapılan değişiklikler yer alıyor. master dalında her zaman yayınlanabilir kod olduğu için bu dala yapılan her commit bir betik ile otomatik olarak yayına alınabilir. develop dalı ise Jenkins gibi bir sürekli entegrasyon aracına bağlanarak her gece inşa edilebilir.

Yukarıdaki resimde git-flow ile geliştirme süreci başladığında master dalı 0.1 etiketi ile yayınlamış olan son güncel sürümde bulunmakta. Bu noktadan itibaren master dalından dallanarak yeni bir develop dalı oluşturuluyor. Mevcut durumda develop ve master dalı aynı koda işaret ediyorlar. Tüm geliştiriciler artık geliştirme sürecine develop dalından devam ederek bu dala commit ediyorlar.

Yeni özellik ekleneceği zaman bu özellik için feature(özellik) dalı açılıyor. Burada özellikten kasıt birden fazla commit içerecek görece büyük değişikliktir diyebiliriz. Aynı anda birden fazla özellik dalı açılabilir. Özelliklerin ayrı dallarda geliştirilmesi hem develop dalının gereksiz commitler ile dolmasını engeller hem de bu yöntemle özellikten vazgeçilmesi durumunda yalnızca özellik dalının silinmesi yeterli olur. Özellik tamamlandığında bu dal develop dalı ile birleştirilir(merge) ve özellik dalı silinir. Yani özellik dalları yalnızca özelliğin geliştirilmesi süresince yaşamlarına devam ederler.

Yeni bir sürüm yayınlanacağı zaman develop dalından yeni bir release dalı dallanır. Sürümdeki son değişiklikler(sürüm numarası değiştirmek gibi) bu dalda yapılır. Gerekli değişiklikler yapıldığında bu sürüm hem master hem de develop dallarına merge edilir ve master dalında sürüm numarası ile etiketlenir. Daha sonra release dalı silinir. Resimde 1.0 sürümü bu şekilde yayınlanmaktadır.

Yayınlanan sürümde kritik bir hata keşfedilmesi durumunda ve bu hatanın acilen çözülüp yayına alınması gerektiğinde hotfix dalları kullanılır. Gerekli hata çözümü yeni açılan hotfix dalında yapıldıktan sonra bu dal hem develop hem de master dalı ile birleştirilir. Yeni sürüm yeni bir sürüm numarası ile etiketlenir. Son olarak hotfix dalı silinir. Resimde 0.2 sürümü bu şekilde yayınlanmaktadır.

Kurulum

Çoğu Linux dağıtımı için git-flow paketi depolarda bulunmakta. Homebrew kullanıcıları

brew install git-flow
komutu ile Mac OS X için kolaylıkla kurulumu gerçekleştirebilirler. Diğer sistemler için kurulum bilgilerine buradan ulaşabilirsiniz.

Model için gereken Git ve Git-flow komutları

Görüldüğü üzere model oldukça kolay olsa da Git-flow komutları olmadan ham Git komutları ile süreci yönetmek oldukça zor. Fakat Git-flow kurduktan sonra modelin avantajlarını göreceğinize ve kullanacağınıza inanıyorum.

SourceTree 1.5 ile gelen Git-flow entegrasyonu

Genelde konsolda çalışan biri olarak GUI uygulamalarını nadiren severim. SourceTree bu istisnalardan biri oldu. Uygulamanın 1.5 sürümü ile git-flow entegrasyonunun gelmesi işleri daha da kolaylaştırdı. Çoğu zaman süreçteki bir sonraki adıma tek bir düğme ile gitmek mümkün oluyor. Farklı bir adım izlemek isterseniz elbette seçme şansınız var. Daha ayrıntılı bilgi için şu blog yazısını okuyabilirsiniz.

İlgili yazılar

Emeği geçenler

Follow me on Twitter