Versiyon kontrol sistemi: dosya değişikliklerinin geçmişini yöneten araç
Sözlük

Versiyon kontrol sistemi: dosya değişikliklerinin geçmişini yöneten araç

Hazırlayan: Mindset Institute EditörlüğüGüncellendi: 3 dk okuma

Versiyon kontrol sistemi nedir, değişiklik geçmişini nasıl tutar, dal ve birleştirme nasıl işler? Kod ekipleri için temel kavramlar ve örnek akış.

Versiyon kontrol sistemi nedir?

Versiyon kontrol sistemi (sürüm kontrol sistemi, İngilizce version control system, kısaca VCS), bir dosya kümesinde zaman içinde yapılan her değişikliği kaydeden ve istenen bir geçmiş duruma dönmeye izin veren yazılımdır. Kaynak kod en yaygın kullanım alanıdır, ancak yapılandırma dosyaları, belgeler ve altyapı betikleri de aynı sistemle izlenir.

Sistem yalnızca eski halleri saklamaz. Hangi değişikliği kimin, ne zaman ve hangi gerekçeyle yaptığını da kayda geçirir. Böylece bir hata ortaya çıktığında sorunun hangi değişiklikle başladığı bulunabilir ve gerekirse yalnızca o değişiklik geri alınır.

Nasıl çalışır?

Çalışma mantığı birkaç kavrama dayanır:

  • Depo (repository): Dosyaların ve tüm geçmişinin tutulduğu yer.
  • Commit: Anlamlı bir değişiklik grubunun açıklama mesajıyla birlikte kaydedilmesi. Her commit geçmişte bir durak noktasıdır.
  • Dal (branch): Ana çizgiyi bozmadan paralel çalışmaya izin veren ayrı geliştirme hattı.
  • Birleştirme (merge): Bir dalda yapılan işin başka bir dala katılması.
  • Çakışma (conflict): Aynı satırın farklı dallarda farklı biçimde değiştirilmesi sonucu otomatik birleştirmenin durması; çözümü insan kararı gerektirir.

Çalışan kişi önce dosyayı değiştirir, ardından değişikliği sahneye alıp commit olarak kaydeder. Sonra bu kaydı ortak depoya gönderir ve diğer ekip üyeleri kendi kopyalarına çeker.

Merkezi ve dağıtık sistemler arasındaki fark

Merkezi sistemlerde geçmiş tek bir sunucuda tutulur ve herkes o sunucuya bağlanarak çalışır. Sunucuya erişim yoksa kayıt almak da zorlaşır. Subversion bu yaklaşımın tanınan örneklerindendir.

Dağıtık sistemlerde ise her geliştirici deponun tam bir kopyasını, bütün geçmişiyle birlikte kendi makinesinde taşır. Commit almak, dal açmak ve geçmişe bakmak ağ bağlantısı gerektirmez. Git bu türün yaygın kullanılan temsilcisidir. Yeni projelerde sıkça dağıtık model seçilir, çünkü dal açmak ucuzdur ve çevrimdışı çalışmak mümkündür.

Küçük bir örnek

Örneğin ekipten birkaç geliştirici aynı uygulamanın ödeme ekranı üzerinde çalışıyor olsun. Biri ana çizgiden yeni bir dal açıp kupon alanını ekliyor, diğeri ayrı bir dalda hata düzeltiyor. İşler bittiğinde değişiklikler ana dala birleştirilmek üzere bir inceleme isteğiyle sunuluyor.

İnceleme sırasında bir meslektaşı değişiklikleri satır satır görüyor, yorum bırakıyor ve onaylıyor. Birleştirme sonrası canlıya çıkan sürümde bir sorun görülürse, geçmişteki ilgili commit bulunarak yalnızca o değişiklik geri alınıyor. Dosyaların e-postayla gönderilen kopyaları ya da "son_hali_kesin" adlı klasörler bu düzenin yerini tutamaz.

Yakın kavramlarla farkı

Git ile GitHub aynı şey değildir. Git, geçmişi yöneten araçtır; GitHub ise Git depolarını barındıran, inceleme isteği ve iş akışı otomasyonu sunan bir hizmettir. Benzer hizmetler başka sağlayıcılarda da vardır.

Versiyon kontrol yedekleme de değildir. Yedek belli bir anın kopyasıdır; versiyon kontrol ise her değişikliği anlamlı bir mesajla ve yazarıyla birlikte, birleştirilebilir biçimde saklar. Dosya paylaşım hizmetlerindeki "sürüm geçmişi" özelliği ise genellikle yalnız tek tek dosyayı kapsar, dal ve birleştirme mantığı sunmaz.

Dallanma stratejisi de ayrı bir konudur: Git Flow ve GitHub Flow gibi modeller, aynı aracın ekipçe nasıl kullanılacağını tarif eder.

Nerede kullanılır?

Yazılım geliştirmede neredeyse her projenin başlangıç noktasıdır. Sürekli entegrasyon ve dağıtım hatları, depoya gelen her değişiklikte testleri otomatik çalıştırmak için versiyon kontrol olaylarına bağlanır. Altyapıyı kod olarak yazan ekipler sunucu tanımlarını, veri ekipleri ise dönüşüm betiklerini ve not defterlerini aynı yöntemle izler.

Yazılım dışında teknik yazarlar, hukuk ekipleri ve veri bilimciler de belge ve model dosyaları için kullanır. Ortak nokta, aynı dosya üzerinde çok sayıda kişinin çalışması ve geçmişin denetlenebilir olması ihtiyacıdır.

Mindset programlarında nerede karşınıza çıkar?

Git ve GitHub Uzmanlığı Eğitimi, Git'e giriş ve temel kavramlar, branch yönetimi ve merge işlemleri, GitHub ile işbirliği, ileri düzey Git teknikleri ve GitHub Actions ile CI/CD modüllerini içerir. Sürüm Kontrolü İş Akışları (Git Flow, GitHub Flow) eğitiminde ise dallanma modellerinin karşılaştırılması, birleştirme, geçmiş ve sürümleme ile yönetişim ve süreç tanımı modülleri yer alır.

İlgili Mindset programı

GIT ve GITHUB Uzmanlığı Eğitimi

Sık sorulanlar

Sık sorulan sorular

Versiyon kontrol sistemi ile Git aynı şey mi?

Hayır. Versiyon kontrol sistemi genel bir kavramdır, Git ise bu kavramı uygulayan yaygın araçlardan biridir. Subversion ve Mercurial gibi başka örnekler de vardır. Git'i öğrenmek kavramı öğrenmenin pratik yoludur, ancak kavram araçtan bağımsız olarak geçerlidir.

Yazılımcı olmayanlar versiyon kontrol kullanabilir mi?

Evet. Metin tabanlı her dosya için çalışır: belge taslakları, yapılandırma dosyaları, veri betikleri. Metin olmayan (ikili biçimli) dosyalarda satır satır karşılaştırma yapılamadığı için fayda sınırlıdır. Bu yüzden en çok düz metin ve kaynak kod için tercih edilir.

Commit mesajı neden önemli?

Mesaj, değişikliğin gerekçesini taşır. Aylar sonra bir hata araştırılırken geçmişe bakan kişi neyin neden değiştiğini mesajdan anlar. "Düzeltme" gibi belirsiz mesajlar geçmişi işe yaramaz hale getirir. İyi mesaj, kısa bir özet ve gerekirse nedeni açıklayan bir paragraf içerir.

Çakışma olursa veri kaybolur mu?

Hayır. Çakışma, sistemin değişiklikleri kendi başına birleştiremediği anlamına gelir ve tüm sürümler geçmişte durur. Geliştirici çakışan bölümü inceleyip hangi içeriğin kalacağına karar verir, sonra birleştirmeyi tamamlar. Gerekirse işlem iptal edilip önceki duruma dönülebilir.

Versiyon Kontrol Sistemi Nedir? Git Örneğiyle Anlatım