GIT: Kontrolsüz versiyon, versiyon değildir! (Giriş)

GIT: Kontrolsüz versiyon, versiyon değildir! (Giriş)
Bu yazının orijinaline blogumdan ulaşabilirsiniz.

Büyük bir yazılım projesi hayal edin. Aynı kod üzerinde çalışan 20 kişi olsun. Bu 20 kişi yazılımın apayrı kısımları üzerinde çalışabildikleri gibi, birbirine çok benzer kısımları üzerinde de çalışıyor olabilirler. Hatta yer yer aynı satırlar üzeride dahi çalışabilirler. Varsayalım ki herkes gün sonunda işini bitirmiş olsun. Sıra kodlarını birleştirmeye gelince nasıl bir yol izleyecekler? Herkes kodunu USB’ye atıp herkesin kopyalamasını mı isteyecek? Yoksa herkes projenin son halini bir kişiye gönderip o kişinin birleştirmesini mi isteyecek?

Veya bir kişi büyük bir iş yapıyor olsun. Bu iş bir hafta kadar sürsün. Bu esnada yazdığı kodları başkaları ile paylaşamaz çünkü yazılımın birçok yerini ilgilendiren kodu değiştiriyor ve işi bitene kadar yazılım düzgün çalışmayacak. Bir hafta sonunda işini bitirmiş, kodunu USB’ye kopyalamış heyecan ile projenin kalanı ile birleştirecek. Fakat kopyalama işlemi esnasında fark ediyor ki başkaları da kodun aynı yerleri ile oynamış, birçok yeni özellik gelmiştir. Bir haftadır üzerinde çalıştığı işin çok büyük bir kısmını baştan yapmak zorundadır. Birkaç gün sonra aynı sorunu yaşamaycağının da herhangi bir garantisi yoktur.

Şimdi takımı boş verelim ve bir proje üzerinde tek başınıza çalıştığınızı varsayalım. Sabah projenizin başına oturdunuz, ve büyük bir özellik eklemeye karar verdiniz. Bu özelliği eklerken kodda birkaç önemli hatayı fark ettiniz ve düzelttiniz. Gün sonunda işinizi bitirdiniz ve fark ettiniz ki proje çalışmıyor. Birkaç saat içinde de önemli bir sunumunuz var. Projeyi sabah yedeklediyseniz ne ala. Aradaki hata çözümleri de gidecek ama olsun, en azından elinizde çalışan bir proje olacak.

Yedekleme konusu da sıkıntılı. Ne kadar sık yedekleme yapmanız lazım? Ayda bir? Haftada bir? Günde bir? Her yeni değişiklikten hemen sonra? Peki ya projenizin boyutu 20-30 mb değil de 2-3 gb ise ne yapacaksınız? Haftada en az 10 gb yeri sadece yedekleme için ayırmanız gerekir, ve bir proje yıllar sürebilir.

Bunun gibi örnekler çoğaltılabilir, ama sanırım yazılım dünyasında işlerin USB ile yürümediğini anlatabildim. Peki nedir bunların çözümü? Başlıktan da anlayabilieceğiniz gibi cevap, versiyon kontrol sistemleridir.

Genel anlamda versiyon kontrol yazılımları (version control software) yazılmınızdaki değişiklikleri takip eden yazılımlardır. Yazılımı, her değişiklik olduğunda bütün projeyi kopyalamak yerine bir önceki sürümü ile olan farkları kaydeder.

Sadece farklarının kaydedilmiş olması proje boyutunun küçük kalmasını sağlıyor. Ayrıca bu sayede kodun içindeki herhangi bir satırın kimin tarafından, ne zaman ve neden değiştirildiğini görmek mümkün oluyor.

Aynı zamanda bu araçlar birden fazla yazılımcının yazıdığı kodları birleştirmeyi de çok kolaylaştırıyor.

Eğer sizi hala ikna edemediysem bu tür yazılımları dünya üzerindeki hemen hemen her profesyonel yazılımcının kullandığını belirteyim. İş görüşmelerinde genellikle bu bir soru dahi olmuyor, versiyon kontrol yazılımlarını bildiğiniz varsayılıyor.

Özetle versiyon kontrol sistemeleri:
  • Yedeklemeyi kolaylaştırıyor
  • Yazılımın geliştirilmesinin takibini kolaylaştırıyor
  • Takım halinde çalışmayı kolaylaştırıyor

VCS – SVN – GIT – Mercurial

Versiyon kontrol konsepti yeni bir şey değil. 70’li yıllardan beri kullanılan bir kavram. Tabi ki modern yazılımlar 70’li yılların yazılımlarından farklı, fakat amaç büyük ölçüde aynı. İnternette ufak bir arama yaparsanız SVN, GIT, Mercurial gibi isimlerle karşılaşacaksınız. Muhtemelen her birisini ölümüne savunacak birilerini bulmanız mümkün, ancak şu anda en çok kullanılanı GIT. Bu yüzden bu yazıya GIT üzeriden devam edeceğim.

GIT 2005 yılında Linus Trovalds (Linux‘un yaratıcısı) tarafından geliştirilmiş, açık kaynak bir versiyon kontrol sistemidir. Bu sistem günümüzde de geliştirilmeye devam ediyor.

Bu uzun girişten sonra hazırsanız sizi ilk derse alalım…
Yorumlar