Pazara çıkmış çok sayıda Versiyon Kontrol Sistemi mevcut. Bu nedenle, beklentilerinizi karşılayan doğru sistemi seçmek kafa karıştırıcı olabilir. Bu yazımızda, CVS, SVN ve Git gibi önemli sistemlerin temel özelliklerini bir araya getirerek doğru olanı seçmeniz için size rehberlik edeceğiz. Bu noktada VCS’leri mimarilerinin türüne göre kategorize ederek başlayacağız.

Versiyon Kontrol Model Kategorileri

Local: Üç farklı versiyon kontrol sistemi içinde en basit ve en çok kullanılan kategori Local olanlardır. Local sistemdeki dosyaların kaydını tutar (bu tekniği, yedeklemeleri almak için dosyaları başka bir klasöre kopyalamanın gelişmiş bir sürümü olarak düşünebilirsiniz). Lokal VCS’ler, geliştiricilerin değişiklikleri güvenilir bir şekilde kaydetmelerine yardımcı olur. Kişisel projeler için iyi çalışan bir seçenektir.

Merkezi: Merkezi (Centralized) VCS, kod tabanında developer’ların ekip çalışması yapmasını sağlamak için geliştirilmiştir (Local VC’nin ekip çalışması için verimli yöntemleri bulunmuyor). Bu tür sistemlerde, geliştiricilerin zaman içinde gerçekleştirdiği tüm değişiklikleri takip eden bir ana sunucu bulunur. Böylece, geliştiriciler en son sürümü alır ve değişikliklerini geri gönderir.

Ancak bu mimarinin kendi dezavantajları vardır. En büyük sorun, mevcut tek kod tabanının olası bir arıza geçirmesidir. Disk bozulması veya benzer bir arıza durumunda, yerel kopyalar dışındaki tüm proje geçmişi Lokal VC sistemlerindeki gibi kaybolacaktır. Her şeyi tek bir alanda tuttuğunuzda, kayıp riski katlanarak artar.

Ayrıca, sisteme ulaşma sorunları arıza sırasında takım çalışmasını da etkiler. Hiç kimse değişiklikleri yerel kopyalara çekemez veya gönderemez.

CVS, Subversion (SVN), bu mimariyi kullanan iki ana sistemdir.

Dağıtık (Distributed): Bu model Merkezi VCS ile aynı kurtarıcı avantajları sunar. Her geliştirici doğrudan kendi yerel repository’si(commit) üzerinde çalışır ve değişiklikler bir sonraki adımda (push) repository’ler arasında paylaşılır.

Tüm geliştiriciler kod tabanının tüm geçmişine sahip olduğundan (yalnızca son anlık görüntü değil), kod tabanını ve zaman içinde yapılan değişiklikleri kaybetme riskini büyük ölçüde azaltır. Herhangi bir sunucu ölürse, herhangi bir client repository’yi geri yüklemek için sunucuya geri kopyalanabilir. (Blockchain’e tanıdık geliyor mu?)

Git ve Mercurial, bu modeli kullanan en yaygın araçlardır.

version-control-tools_new

En Yaygın Versiyon Kontrol Sistemleri

Sektörde en sık kullanılan üç farklı kaynak kontrol aracı aşağıda temel artıları ve eksileri ile listelenmiştir.

Concurrent Version System - CVS

Eşzamanlı Sürüm Oluşturma Sistemi olarak da bilinir. Ücretsiz bir revizyon kontrol sistemidir. Listelenen dört VCS arasında en eskisidir.

Avantajları

  • Açık kaynaktır.
  • Çapraz platform desteği sunar (Windows, Linux, Mac)
  • Modern revizyon kontrol sistemlerinin öncüsüdür.

Dezavantajları

  • Merkezidir.
  • 2008’den beri güncelleme yapılmamıştır.
  • Sınırlı ekip üyesi ve kullanım sunar.
  • Veri bütünlüğünü doğrulamak için sağlama kontrolü bulunmuyor. (Zamanla bozulmaya yol açabilir)
  • Atomik check-out veya commit yok. (Çoklu aktarım sırasında herhangi bir sorun olursa, sistem güncellenmiş dosyaları önceki duruma geri almaz)

Apache Subversion - SVN

Subversion, Apache Foundation tarafından geliştirilen açık kaynaklı, merkezi bir sürüm kontrol sistemidir. Subversion, CVS’den sonra en eski ve en sık kullanılan sistemdir. Ayrıca, projeleri için SVN ile çalışan organizasyonlar da mevcuttur.

Avantajları

  • Açık kaynaktır.
  • Stabil sürüm oluşturulabilir.
  • Topluluk desteği hala mevcuttur.

Dezavantajları

  • Merkezidir.
  • Çevrimdışı çalışma desteği yoktur.
  • Özellikle büyük branch’leri birleştirirken Git’e kıyasla daha yavaştır. 
  • Git’in sahip olduğu pull request seçeneği yoktur.
  • Artık pek havalı değil!
version-control-git-platforms_new

Git

Git, çok küçükten çok büyük projelere kadar tüm ölçeklerde hızlı ve verimli çalışabilmek için tasarlanmış ücretsiz ve açık kaynaklı dağıtık bir sürüm kontrol sistemidir. (https://git-scm.com/)

Günümüzde Git, Sürüm Kontrol Sistemi seçimi için bir standart haline gelmiştir. Ama neden? Git kullanmanın diğer sürüm kontrol sistemlerine göre avantajları nelerdir?

Avantajları

  • Dağıtık mimari offline çalışmayı daha pratik hale getirir.
  • Branching daha kolay ve daha hızlıdır.
  • Pull request seçeneği mevcuttur.
  • Birçok platform ek özelliklerle birlikte Git hizmeti sunar.
  • Topluluk desteği sunulur.
  • En popüler VCS’dir!

Dezavantajları

  • Güvenlik sorunları olabilir. Kullanıcının repository’ye tam erişimi vardır. Dosya veya branch güvenliği yoktur.
  • Dosyalar için kilitleme yoktur.

Git Platformları - GitHub, GitLab, BitBucket

Organizasyonunuz için kullanmaya karar verdiğiniz aracın Git olduğunu varsayarsak, yeni bir soru ortaya çıkıyor. Hangi Git? Kendiniz için bir Git sunucusu kuracak mısınız? Veya bir platform mu kullanacaksınız? Vereceğiniz cevaplar beklentilerinize bağlı olsa da, birçok kişi kullanıcı yetkilendirme, tool entegrasyonları gibi ek özelliklerden yararlanmak için platformları kullanmayı tercih ediyor.

git-and-github_new

GitHub, GitLab, Bitbucket, AWS vb. platformlar, ek özellikler (artık tüm platformlar ana özellikleri bulunduruyor) ve farklı lisanslama modelleriyle müşterilerine Git hizmeti sunan platformlardır. Mevcut şartlarda bakış açısı, topluluk desteği ve tool stack platform seçimini etkileyen ana faktörlerdir.

Peki, senin favorin hangisi? Lütfen bu soruyu cevaplayarak ankete katılın.