Kaynak kod kontrolü olarak da bilinen versiyon kontrol sistemleri, yazılımda ya da genel olarak dosyalarda yapılan değişiklikleri izlemek, yönetmek ve iş birliği yapmak amacıyla kullanılan izleme ve yönetme araçlarıdır. İlk olarak 1970’lerde kullanılmaya başlanmıştır. Bu erken dönemde, versiyon kontrol sistemleri daha çok büyük kurumsal projeler için tercih ediliyordu. Ancak zamanla yazılım geliştirme süreçlerindeki önemi arttı ve versiyon kontrol sistemleri hemen hemen her yazılım projesinin vazgeçilmez bir parçası haline geldi.

Bu yazıda, versiyon kontrol sistemlerini temel amaçlarından, farklı türlerine, popüler araçlardan, platformlara kadar her yönüyle inceleme olanağı bulacaksınız. Ayrıca, projeleriniz için doğru versiyon kontrol sistemi seçimini nasıl yapmanız gerektiğini de öğreneceksiniz.

Versiyon Kontrolünün Temel Amacı ve Kullanılma Sebebi

Versiyon kontrol sistemlerinin temel amacı, dosyaların değişikliklerini izlemek ve bu değişiklikleri yönetmektir. Versiyon kontrol sistemlerini kullanmak, yazılım geliştirme süreçlerini daha düzenli ve verimli hale getirirken aynı zamanda projelerin daha iyi yönetilmesini sağlar.

  • Değişiklikleri Kaydetmek ve Geri Almak: Versiyon kontrol sistemi, her dosya değişikliğini kaydeder ve gerektiğinde bu değişiklikleri geri almanızı sağlar. Bu, hataları düzeltmek veya eski bir sürüme dönmek için çok kullanışlıdır.
  • İşbirliği ve Eş zamanlı Çalışma: Birden fazla geliştirici aynı projede çalışabilir ve değişiklikleri eş zamanlı olarak yapabilir. Her geliştirici kendi çalışma alanını korur ve sonunda değişiklikleri ana projeye entegre edebilir.
  • İzlenebilirlik ve Şeffaflık: Versiyon kontrol sistemi, her değişikliği kimin yaptığını, ne zaman yaptığını ve neden yaptığınızı izlemenizi sağlar. Bu, projenin geçmişini şeffaf ve izlenebilir kılar.

Versiyon Kontrol Sistem Çeşitleri

1. Lokal Versiyon Kontrol Sistemleri

Dosyaların sürüm geçmişini sadece bir geliştiricinin kendi bilgisayarında sakladığı basit bir versiyon kontrol sistemidir. Bu tür sistemler genellikle küçük projeler, kişisel kullanım veya öğrenme amaçları için tercih edilir.

  • Avantajları
    • Basit ve Hızlı: Kurulumu kolaydır ve hızlı bir şekilde kullanılabilir. Dosyaların sürüm geçmişi, kullanıcının bilgisayarında saklandığı için erişim hızlıdır.
    • Bağımsızlık: Her kullanıcı kendi lokal versiyonunu yönetir, bu nedenle başkalarının işine müdahale etmez. Bu sebeple, kişisel projeler veya küçük ekipler için idealdir.
    • Çevrimdışı Çalışma: İnternet bağlantısına ihtiyaç duymadan dosyaları yönetmenizi sağlar. Seyahat ederken veya çevrimdışı çalışma gerektiren durumlar için faydalıdır.
  • Dezavantajları
    • İşbirliği Zorluğu: Aynı projede çalışan birden fazla geliştirici arasındaki işbirliğini zorlaştırabilir. Dosyaların paylaşılmaması, çakışmaların daha sık meydana gelmesine neden olabilir.
    • Veri Kaybı Riski: Dosya kaybı veya bilgisayar arızası gibi sorunlar nedeniyle veri kaybı riski daha yüksektir. Bu nedenle düzenli yedeklemeler yapmak önemlidir.
    • Sınırlı Takip ve İzleme: Projenin sürüm geçmişini sınırlı bir şekilde takip edebilir ve izleyemez. Büyük projelerde veya profesyonel yazılım geliştirme süreçlerinde eksiklik olabilir.
  • Örnek local versiyon kontrol sistemleri; Revision Control System (RCS) ve Source Code Control System (SCCS).

2. Merkezi Versiyon Kontrol Sistemleri

Tüm dosyaların merkezi bir sunucuda saklandığı ve geliştiricilerin bu sunucu üzerinden çalıştığı bir versiyon kontrol sistemidir.

  • Avantajları
    • Merkezi Depo: Tüm dosyalar merkezi bir depoda saklandığı için, geliştiriciler her zaman en güncel dosyalara erişebilirler.
    • İşbirliği Kolaylığı: Birden fazla geliştirici aynı projede çalışırken, dosyaları merkezi depo üzerinden paylaşabilir ve değişiklikleri kolayca takip edebilirler.
    • Güvenlik ve Kontrol: Dosyaların güvenliğini sağlar ve kimin hangi değişiklikleri yaptığını izleyebilirsiniz. Bu da, projenin bütünlüğünü korur.
    • Geçmiş İzleme: Dosyaların geçmişini izlemek ve eski sürümlere geri dönmek için kullanışlıdır. Hataları düzeltmek veya önceki sürümleri incelemek için faydalı olabilir.
  • Dezavantajları
    • Bağlantı Gereksinimi: Merkezi versiyon kontrol sistemlerini kullanırken, geliştiricilerin internet bağlantısına ihtiyaçları vardır. Bağlantı kesildiğinde çalışma zorlaşabilir.
    • Tek Nokta Arızası: Merkezi sunucu, sistemdeki tek bir nokta arızası olabilir. Sunucu çöktüğünde ya da veri kaybolduğunda ciddi sorunlar ortaya çıkabilir.
    • Çakışma Sorunları: Birden fazla geliştirici aynı dosyayı düzenlediğinde çakışmalar meydana gelebilir. Bu çakışmaların çözülmesi zaman alabilir.
    • Bağımlılık: Merkezi versiyon kontrol sistemlerini kullanırken sürekli olarak sunucuya bağımlı olunur. Sunucu erişimi yoksa, çalışma durabilir.
  • Örnek merkezi versiyon kontrol sistemleri; Concurrent Versions System (CVS), Apache Subversion (SVN), Helix core (Perforce), Microsoft Team Foundation Server (TFS).

3. Dağıtık Versiyon Kontrol Sistemleri

Dosyaların hem merkezi bir sunucuda hem de her kullanıcının kendi bilgisayarında saklandığı ve çalıştığı bir versiyon kontrol sistemidir. Çoklu geliştiricilerle ve esnek çalışma koşullarıyla kullanışlıdır.

  • Avantajları
    • Çalışma Bağımsızlığı: Her geliştirici, kendi lokal kopyası üzerinde çalışabilir ve internet bağlantısına ihtiyaç duymaz. Seyahat ederken veya çevrimdışı çalışma gerektiren durumlar için idealdir.
    • Hızlı ve Etkili Dalma ve Birleştirme: Dalma (branching) ve birleştirme (merging) işlemlerini hızlı ve etkili bir şekilde gerçekleştirir. Farklı özelliklerin veya geliştirmelerin izlenmesini ve birleştirilmesini kolaylaştırır.
    • Güçlü Geçmiş İzleme: Her kullanıcının tam geçmiş bilgisine sahip olduğu için, eski sürümlere ve geçmiş değişikliklere kolayca erişebilirsiniz. Bu, hata ayıklama ve geriye dönük analiz için faydalıdır.
    • İşbirliği Kolaylığı: Çoklu geliştiriciler, kendi lokal kopyalarında bağımsız olarak çalışabilir ve daha sonra değişikliklerini merkezi sunucuya entegre edebilir. Bu, işbirliği yapmayı kolaylaştırır.
  • Dezavantajları
    • Öğrenme Eğrisi: Merkezi versiyon kontrol sistemlerine göre daha karmaşıktır ve yeni başlayanlar için öğrenme durumu daha zor olabilir.
    • Güvenlik ve İzinler: Dağıtık bir yapıda güvenlik ve izinlerin yönetilmesi daha karmaşıktır. Hassas projelerde bu daha fazla dikkat gerektirebilir.
    • Depo Boyutları: Dağıtık sistemler, projenin tüm geçmişini her kullanıcının bilgisayarında saklar, bu da depo boyutlarının hızla büyümesine neden olabilir.
    • Bağlantı Gereksinimi: Merkezi sunucu kullanmadan önce geliştiricilerin birbiriyle düzenli olarak senkronize olması gerekir, bu da internet bağlantısına ihtiyaç duyulduğu anlamına gelir.
  • Örnek dağıtık versiyon kontrol sistemleri; Git, Mercurial, Bazaar, BitKeeper, Darcs, Fossil.

Yaygın Kullanılan Versiyon Kontrol Sistemleri

ÖzelliklerGitSVN (Apache Subversion)Mercurial
TürDağıtık Versiyon KontrolMerkezi Versiyon KontrolDağıtık Versiyon Kontrol
Ana DilCCPython
Basit KullanımEvetEvetEvet
Veri BütünlüğüYüksekYüksekYüksek
PerformansHızlıOrta seviyedeHızlı
Dallanma ve BirleştirmeEvetEvetEvet
Eş Zamanlama (Synchronization)EvetEvetEvet
Kollar (Branches)EvetEvetEvet
Etiketleme (Tagging)EvetEvetEvet
Dosya Kilitleme (Locking)HayırEvetHayır
İşbirliği AraçlarıGitHub, GitLab, Bitbucket

Temel Komutlar:

Git:

  • Depo Çekme: git clone [URL]
  • İlk Depo Oluşturma: git init
  • Değişiklikleri Ekleme: git add [dosya]
  • Yerel Depoya Taahhüt: git commit -m "Açıklama"
  • Uzak Depoya Gönderme: git push
  • Dal Oluşturma: git branch [dal_adı]
  • Daldan Ana Dala Birleştirme: git merge [dal_adı]

SVN:

  • Depo Oluşturma: svnadmin create [depo_adı]
  • Depo Çekme: svn checkout [URL]
  • Değişiklikleri Ekleme: svn add [dosya]
  • Taahhüt (Commit): svn commit -m "Açıklama"
  • Güncelleme (Update): svn update
  • Dal Oluşturma: svn copy [URL] [dal_adı]
  • Daldan Ana Dala Birleştirme: svn merge [dal_adı]

Mercurial:

  • İlk Depo Oluşturma: hg init
  • Depo Çekme: hg clone [URL]
  • Değişiklikleri Ekleme: hg add [dosya]
  • Yerel Depoya Taahhüt: hg commit -m "Açıklama"
  • İlgili Depoya Gönderme: hg push
  • Dal Oluşturma: hg branch [dal_adı]
  • Daldan Ana Dala Birleştirme: hg merge [dal_adı]

Versiyon Kontrol Sistem Platformları

GitHubGitLabBitbucket
Nedir ve Neden Kullanılır?– GitHub, kod depolama ve işbirliği platformu. Açık kaynak projeleri destekler.– GitLab, kod depolama ve sürekli entegrasyon/dağıtım için sunucu tabanlı bir çözümdür.– Bitbucket, Git ve Mercurial tabanlı kod depolama ve işbirliği platformudur.
Projeleri Nasıl Organize Eder?– Depo (repository) ve proje yönetimi sağlar.– Depo ve proje yönetimi, sürekli entegrasyon/dağıtım (CI/CD) entegrasyonu sunar.– Depo ve proje yönetimi, Jira ve Trello gibi ek araçlarla bütünleştirilebilir.
İşbirliği ve Topluluk– İşbirliği için “Pull Requests” ve topluluk katkılarına açıktır.– İşbirliği için “Merge Requests” ve büyük bir kullanıcı topluluğuna sahiptir.– İşbirliği için “Pull Requests” ve topluluk katkılarına açıktır.
Sunucu Tabanlı Avantajları– Proje ve depolarınız GitHub sunucularında barındırılır.– Kendi sunucunuzda GitLab’ı barındırabilirsiniz.– Bitbucket, Atlassian sunucularında barındırılabilir.
Karşılaştırma– GitHub, özellikle açık kaynak projeleri için popülerdir.– GitLab, özellikle büyük işletmeler ve özelleştirilebilirlik isteyenler için uygundur.– Bitbucket, Jira ve Trello gibi ek araçlar sunar.
Hangi VCS Platformunu Seçmeliyiz?– Proje türüne ve topluluk ihtiyaçlarına bağlıdır.– Proje büyüklüğüne ve ihtiyaçlarına bağlıdır.– Proje gereksinimlerine ve ek araç ihtiyacına bağlıdır.

Kaynakça:

https://about.gitlab.com/topics/version-control/#benefits-of-version-control

https://www.atlassian.com/git/tutorials/what-is-version-control

https://www.git-tower.com/learn/git/ebook/en/desktop-gui/appendix/from-subversion-to-git