Versiyon Kontrol Sistemi Nedir? Hangi Problemleri Çözer?

Nedir? Hangi problemleri Çözer?#

Yazılım geliştirme dünyasında, kodun zaman içinde nasıl değiştiğini takip etmek oldukça kritiktir. Kod tabanında yapılan değişikliklerin kayıt altına alınması, geriye dönük incelemeler yapmayı, hataları geri almayı veya belirli bir sürüme dönmeyi kolaylaştırır. İşte burada versiyon kontrol sistemleri (VCS) devreye girer. Versiyon kontrol sistemi, projede yapılan her değişikliği kayıt altına alır ve tüm geliştirme sürecini düzenler.

Versiyon kontrol sistemleri, özellikle şu sorunları çözer:

  • Kod Yedekleme ve Geri Alma: Bir projede yapılan her değişiklik bir “commit” olarak kaydedilir ve bu sayede eski versiyonlara kolayca geri dönülebilir. Bu, bir değişikliğin beklenmedik sonuçlara yol açtığı durumlarda son derece faydalıdır.

  • Takım Çalışması Yönetimi: Bir projede birden fazla geliştirici çalışıyorsa, aynı dosya üzerinde yapılan değişikliklerin çatışmalara yol açmaması için bir düzen gereklidir. VCS, her geliştiricinin kendi dalında (branch) bağımsız olarak çalışmasını sağlar, böylece herkes kendi işini yaparken başkalarının çalışmalarını etkilemez.

  • Değişiklik İzleme ve Yorumlama: Her commit, değişikliklerin ne olduğunu ve neden yapıldığını açıklayan bir mesaj içerir. Bu, projede daha önce yapılan değişiklikleri anlamayı ve yapılan güncellemeleri takip etmeyi kolaylaştırır.

Sonuç olarak, VCS’ler, geliştiricilere zaman içinde projeyi güvenle güncelleme, sorunları çözme ve proje üzerinde daha etkin bir iş birliği sağlama imkanı tanır.


Git ile GitHub, GitLab, Bitbucket Arasındaki Fark Nedir?#

Git, dünyada en yaygın kullanılan dağıtık versiyon kontrol sistemidir ve projeyi yerel makinenizde yönetmenizi sağlar. Ancak, projeyi paylaşmak veya birden fazla kişiyle çalışmak istediğinizde, değişikliklerinizi uzakta güvenli bir yerde saklamak istersiniz. İşte burada GitHub, GitLab ve Bitbucket gibi platformlar devreye girer. Bu platformlar, Git tabanlı projeleri bulut üzerinde saklayarak ekipler arasında iş birliğini kolaylaştırır.

Bu platformların farklarını şöyle açıklayabiliriz:

  • Git: Tek başına bir yazılımdır ve komut satırı veya grafik arayüzü aracılığıyla kullanılabilir. Git, dağıtık bir sistem olarak çalışır; yani tüm proje geçmişi yerel bilgisayarınıza kaydedilir. Bu sayede internet bağlantısı olmadan da projede değişiklik yapabilir ve commit’lerinizi saklayabilirsiniz. Ancak, tek başına Git, birden fazla kullanıcı ile proje üzerinde iş birliği yapmaya yeterli değildir.

  • GitHub: Git ile çalışan projeler için bir depolama ve iş birliği platformudur. Özellikle açık kaynak projelerde popülerdir ve dünyanın dört bir yanındaki geliştiricilerle projeleri paylaşmayı kolaylaştırır. GitHub, ayrıca GitHub Actions gibi CI/CD araçlarıyla otomatik test ve dağıtım süreçlerini yönetmeye olanak tanır.

  • GitLab: GitHub’a benzer şekilde Git tabanlı projeleri barındırır, ancak özellikle kurumsal ekipler için daha kapsamlı CI/CD entegrasyonlarına sahiptir. GitLab, kendi sunucularınızda barındırılabilir ve özelleştirilebilir. Bu nedenle, güvenlik veya veri gizliliği açısından GitLab’ı tercih eden birçok büyük kuruluş vardır.

  • Bitbucket: Atlassian tarafından geliştirilen Bitbucket, hem Git hem de Mercurial desteği sunar (Mercurial desteği günümüzde azalmıştır). Bitbucket, Jira ve Trello gibi Atlassian araçlarıyla güçlü bir entegrasyona sahiptir, bu da projeyi sadece yazılım geliştiriciler değil, proje yönetim ekipleri tarafından da kolayca izlenebilir hale getirir.

Sonuç olarak, Git sadece bir araçken, GitHub, GitLab ve Bitbucket gibi platformlar bu aracın üzerinde iş birliği, barındırma, izleme ve dağıtım işlemlerini sağlayan, modern yazılım geliştirme süreçlerini destekleyen gelişmiş sistemlerdir.


Projenizi Git Reposu Haline Getirme: Adım Adım Rehber#

Mevcut bir projeyi Git reposu haline getirmek oldukça basit ve etkili bir süreçtir. Bu adımlar sayesinde projenizin geçmişini kaydedebilir, ilerleyen süreçlerde yapılacak değişiklikleri izleyebilir ve paylaşabilirsiniz.

1. Git’i Başlatın

Öncelikle, terminali açın ve projenizin bulunduğu dizine gidin. Ardından, aşağıdaki komutu çalıştırarak Git’i başlatabilirsiniz:

git init

Bu komut, proje dizininizde bir .git klasörü oluşturur ve burası artık projenizin tüm versiyon geçmişini saklayacak bir Git reposu haline gelir.

2. Dosyaları Takip Edilmeye Hazırlayın

Git’e hangi dosyaların takip edilmesini istediğinizi belirtmeniz gerekir. Tüm dosyaları eklemek için aşağıdaki komutu kullanabilirsiniz:

git add .

Bu komut, dizindeki tüm dosyaları “eklenecek” yani “takip edilmeye hazır” duruma getirir.

3. İlk Commit’inizi Oluşturun Git’e projenizin mevcut durumunu kaydetmesi için bir commit mesajı ile ilk kaydınızı oluşturun:

git commit -m "İlk commit: Projeyi Git reposu haline getirdim"

Bu komut, projenizin mevcut durumunu kaydeder ve artık geçmişe dönük erişilebilir hale gelir.

4. Uzaktaki (Remote) Bir Reposu Ekleyin (İsteğe Bağlı)

Eğer projenizi GitHub, GitLab veya Bitbucket gibi bir platforma yüklemek istiyorsanız, önce uzaktaki (remote) repo URL’sini projenize bağlamanız gerekir. Örneğin, GitHub üzerinden bir repo oluşturduktan sonra URL’yi aşağıdaki komut ile ekleyebilirsiniz:

git remote add origin https://github.com/kullaniciadi/projeadi.git

5. İlk Push İşlemi ile Projeyi Yükleyin Uzaktaki repoya ilk defa yükleme yapmak için aşağıdaki komutu çalıştırabilirsiniz:

git push -u origin main

Not: Eğer main yerine master veya başka bir dal adı kullanıyorsanız, bu komutta o dal adını kullanmalısınız.

Bu adımları takip ederek, yerel projenizi bir Git reposu haline getirebilir ve gerekirse uzaktaki bir platforma kolayca yükleyebilirsiniz.

Git Workflows Nedir? Projeye Uygun İş Akışını Seçme Rehberi#

Farklı projeler ve ekip yapıları için çeşitli Git iş akışları (workflows) geliştirilmiştir. Her bir iş akışı, proje ihtiyaçlarına göre uyarlanmıştır ve ekiplerin organize bir şekilde çalışmasını sağlar. Doğru workflow seçimi, geliştirme sürecinde karşılaşılan kod çatışmalarını azaltır, kod kalitesini artırır ve projeye katkıda bulunmayı kolaylaştırır.

İşte en yaygın kullanılan Git Workflows:

1. Git Flow#

Git Flow, özellikle büyük projelerde ve sürekli geliştirme döngülerinde popüler bir iş akışıdır. Bu workflow, belirli branch türleri ve sürüm yönetimi süreçlerini içerir:

  • Main Branch (Ana Dal): En son üretim (production) sürümünü barındırır.
  • Develop Branch (Geliştirme Dalı): Yeni özelliklerin test edilip birleştirildiği daldır. Son haliyle production öncesi sürüm burada oluşur.
  • Feature Branches: Yeni özellikler üzerinde çalışmak için develop dalından ayrılan dallardır. İşlem tamamlandığında develop dalına birleştirilir.
  • Release Branches: Üretim öncesi son testlerin yapıldığı dallardır. Sorunsuz olduğunda main dalına ve gerekirse develop dalına da birleştirilir.
  • Hotfix Branches: Production ortamındaki hataları acilen düzeltmek için kullanılan dallardır. main dalından ayrılır ve düzeltilen hata main ile develop dallarına geri alınır.

Öne Çıkan Özellikler: Git Flow, projede çok sayıda paralel geliştirmenin olduğu durumlar için oldukça kullanışlıdır. Yeni özellik eklemek, hataları gidermek ve sürüm kontrolü yapmak gibi durumlar için sistematik bir yapı sunar.

2. Feature Branch Workflow#

Feature Branch Workflow, her yeni özellik için bağımsız bir branch açmayı teşvik eder. Geliştiriciler main veya develop dalından ayrılan feature dallarında çalışır ve geliştirmeleri tamamlandığında bu dalları ana daldan birleştirirler.

  • Main/Develop Branch: Çalışmaların birleşeceği ana daldır.
  • Feature Branches: Her yeni özellik için açılan dallardır. İş tamamlandığında main veya develop dalına merge edilir.

Öne Çıkan Özellikler: Bu iş akışı, özellikle küçük veya orta ölçekli projelerde, özellik bazında geliştirme yapılırken kullanılır. Her özellik izole olduğundan, çatışmalar daha kolay yönetilir.

3. Forking Workflow#

Açık kaynak projelerde yaygın olarak kullanılan Forking Workflow, her geliştiricinin ana projeyi fork (kopyalama) yaparak üzerinde bağımsız çalışmasını sağlar. Değişiklikler tamamlandığında, ana projeye katkıda bulunmak için Pull Request (PR) açılır.

  • Fork: Geliştiricinin ana projeyi kopyalayarak kendi deposunda çalışması.
  • Pull Request: Yapılan değişiklikleri ana projeye geri çekme talebidir.

Öne Çıkan Özellikler: Forking Workflow, özellikle açık kaynak projelerde katkıda bulunan çok sayıda geliştiricinin bağımsız olarak çalışmasını sağlar ve ana projede kod bütünlüğünü korur.

4. Trunk-Based Development#

Trunk-Based Development, geliştiricilerin tüm değişiklikleri doğrudan ana dala (main veya trunk) göndermesini içerir. Herkesin ortak bir dalda çalışması, hızlı geliştirme döngüsü sağlar ve sürekli entegrasyon (CI) araçlarıyla sık güncellemeler yapılır.

  • Main/Trunk Branch: Tüm değişikliklerin doğrudan gönderildiği ana daldır.
  • Short-Lived Branches: Küçük geliştirmeler için kısa süreli dallar açılabilir ancak hızlıca ana daldan birleştirilir.

Öne Çıkan Özellikler: Trunk-Based Development, hızlı geri bildirim ve sürekli dağıtım gerektiren projeler için idealdir. Çatışmaların hızlıca çözülebilmesi için ekip içi yüksek iletişim gerektirir.


Hangi Workflow Sizin İçin Uygun?#

Projenizin yapısı, ekip büyüklüğü ve çalışma tarzı, hangi iş akışının en uygun olduğunu belirler. Küçük ekipler veya hızlı teslimat gerektiren projeler için Trunk-Based Development ideal olabilirken, büyük projelerde Git Flow veya Feature Branch Workflow tercih edilebilir. Açık kaynak projelerde ise Forking Workflow en yaygın seçimdir.

Workflow’un doğru bir şekilde belirlenmesi, projeye katkıda bulunan herkesin daha düzenli çalışmasını sağlar ve gelişim sürecini hızlandırır. İhtiyaçlarınızı göz önünde bulundurarak en uygun iş akışını seçmek, hem ekip hem de proje için büyük bir fark yaratabilir.

Bu konuda Atlassian ekibinin mükemmel bir yazısı bulunuyor ve okumanızı şiddetle tavsiye ederim.

Atlassian Git Workflows