Sürüm kontrolü uzun süre yalnızca yazılım geliştiricilerin işi sayıldı. Altyapı kod olarak tanımlanmaya başladığında bu değişti: bugün bir sistem yöneticisinin yapılandırma dosyaları, betikleri ve altyapı tanımları da aynı disiplini gerektiriyor.
Neyi çözer
Yapılandırma dosyalarını .bak, .eski, .calisan-hali gibi kopyalarla saklamak yaygın bir alışkanlıktır ve üç soruyu yanıtlayamaz: bu satırı kim ekledi, ne zaman eklendi, neden eklendi?
Sürüm kontrolü tam olarak bunları yanıtlar. Her değişiklik bir yazara, bir zamana ve bir açıklamaya bağlanır. Geriye dönmek dosya kopyalamak değil, tek bir komuttur.
Üçüncüsü — “neden” — en değerlisidir. Bir yıl sonra kimsenin hatırlamadığı bir istisna kuralının gerekçesi, o değişikliğin açıklamasında durur.
İşleme: değişikliğin birimi
Bir işleme (commit), bir anlık görüntüdür: o an dosyaların hâli, kim yaptı, ne zaman ve neden.
İyi bir işleme tek bir mantıksal değişikliği kapsar. “Günlük ayarlarını düzelt” ile “yeni sunucu ekle” ayrı işlemeler olmalıdır — çünkü biri geri alınmak istendiğinde diğerini de götürmemesi gerekir.
Açıklama alanı burada asıl değerdir. “Düzeltme” yazan bir açıklama hiçbir şey anlatmaz; “DNS iletici zaman aşımı 3 saniyeye indirildi, ISS sunucusu yavaş yanıt veriyordu” cümlesi bir yıl sonra da işe yarar.
Dal ve birleştirme
Dal (branch), ana hattan ayrılıp bağımsız çalışmanın yoludur. Riskli bir değişikliği denerken ana hattı bozmazsınız.
İş bittiğinde dal ana hatta birleştirilir. Aynı satır iki tarafta da değiştiyse bir çakışma çıkar ve elle çözülür.
Pratik kural: dallar kısa ömürlü olmalıdır. Haftalarca ayrı duran bir dal, birleştirme sırasında büyük çakışmalar üretir. Sürekli tümleştirmenin fikri de budur; ayrıntısı CI/CD nedir yazısında.
Uzak depo
Yerel depo sizin makinenizdedir. Uzak depo ortak sunucudadır ve ekibin buluştuğu yerdir.
push yerel işlemeleri uzağa gönderir, pull uzaktakileri yerele alır. Bu, aynı zamanda bir yedektir: makineniz gitse bile geçmiş uzakta durur.
Ama uzak depo tek başına yedek sayılmaz — silinen bir depo ya da ele geçirilen bir hesap her şeyi götürebilir. Kritik depolarda ayrıca yedekleme gerekir; kuralın modern hâli 3-2-1 kuralı rehberinde.
İnceleme kültürü
Değişikliklerin ana hatta girmeden önce bir başkası tarafından okunması, sürüm kontrolünün en değerli yan ürünüdür.
Bu yalnızca hata yakalamaz; bilgiyi yayar. Bir yapılandırma değişikliğini iki kişi görmüşse, o sistemi bilen kişi sayısı da ikiye çıkmıştır.
Altyapı tarafında inceleme özellikle değerlidir, çünkü plan çıktısı — neyin değişeceğinin listesi — uygulanmadan önce okunabilir. Yaklaşımın tamamı kod olarak altyapıya nereden başlanır rehberinde.
Depoya sır girmez
En sık ve en pahalı hata budur: bir parola ya da anahtarın işlemeye dahil edilmesi.
Sorun, sonradan silmenin yetmemesidir. Sürüm kontrolünün amacı geçmişi saklamaktır; sır eski işlemelerde durmaya devam eder ve depoyu klonlayan herkes ona ulaşır.
Bu yüzden iki önlem birlikte uygulanır: .gitignore ile sır dosyalarını dışarıda tutmak, ve otomatik bir tarayıcıyla kaçakları yakalamak. İnsan gözü bunu güvenilir biçimde yapamaz.
Sır depoya girdiyse tek doğru yanıt onu iptal etmek ve yenisini üretmektir. Geçmişi temizlemek ikincil bir adımdır.
CI tarafındaki karşılığı boru hattı güvenliği rehberinde.
Sistem yöneticisi için pratik kullanım
Sürüm kontrolü yalnızca uygulama kodu için değildir. Şu dosyalar da oraya aittir:
PowerShell ve kabuk betikleri, sunucu yapılandırma dosyaları, altyapı tanımları, izleme kuralları, güvenlik duvarı kural setleri ve yordam belgeleri.
Kazanç somuttur: bir değişiklik sonrası bir şey bozulduğunda “dün ne değişti” sorusu saniyeler içinde yanıtlanır. Kural setinin okunabilir tutulması güvenlik duvarı kural seti rehberinde ele alınıyor.
Grup ilkeleri gibi doğrudan metin olmayan yapılandırmalar da dışa aktarılıp sürümlenebilir; GPO yedek otomasyonu rehberi bunu anlatıyor.
İki dosyayı karşılaştırmak
Günlük işte en çok kullanılan işlem, iki sürüm arasındaki farkı görmektir. Sürüm kontrolü bunu yerleşik olarak yapar.
Depo dışındaki hızlı karşılaştırmalar için — bir sunucudan alınan iki yapılandırma çıktısı gibi — metin farkı aracını kullanabilirsiniz.
Kısaca
Sürüm kontrolü, “kim, ne zaman, neden” sorularını yanıtlayan bir defterdir. İşleme değişikliğin birimidir, dal bağımsız çalışmanın yolu, uzak depo ekibin buluşma noktasıdır.
Sistem yöneticisi için asıl kazanç geçmişe dönebilmek değil, değişikliği görünür kılmaktır. Bir sorunun nedenini aramak, yapılandırmanın geçmişi tutuluyorsa dakikalar; tutulmuyorsa günler alır.