Bir yazılım projesinde tek başınıza çalışsanız bile, dosyalarınızın zaman içindeki değişimini takip edemediğinizde er ya da geç başınız derde girer. "Dün çalışıyordu, ne değişti?" sorusu, sürüm kontrolü kullanmayan her ekibin ortak kabusudur. İşte Git tam da bu kaosu düzene çeviren araçtır. Dağıtık bir sürüm kontrol sistemi (distributed version control system) olarak, projenizin her anını fotoğraflar; geriye dönebilir, dallar açabilir ve onlarca kişinin aynı kod tabanı üzerinde çakışmadan çalışmasını sağlarsınız.

Bu yazıda Git'i teoriden çok pratik açıdan ele alacağız. Amacımız, günlük geliştirme akışınızı sağlam bir zemine oturtmak ve sık yapılan hataların önüne geçmek. Berasoft olarak özel yazılım projelerinde ilk günden itibaren düzgün bir Git iş akışı kurmanın, projenin ilerleyen aylarında ne kadar zaman kazandırdığını defalarca gördük.
Sürüm Kontrolü Neden Var?
Sürüm kontrolü, kodunuzun geçmişini kayıt altına alan bir zaman makinesidir. Her anlamlı değişikliği bir "commit" olarak kaydedersiniz ve bu commit'ler bir zincir oluşturur. Bu zincir sayesinde:
- Hangi satırı kimin, ne zaman ve neden değiştirdiğini görebilirsiniz.
- Bir hata fark ettiğinizde çalışan eski bir haline saniyeler içinde dönebilirsiniz.
- Birden fazla geliştirici aynı projede paralel çalışabilir.
- Deneysel çalışmaları ana koddan izole edip, işe yaramazsa gönül rahatlığıyla atabilirsiniz.
Git'in "dağıtık" olması, her geliştiricinin bilgisayarında projenin tam bir kopyası olduğu anlamına gelir. Merkezi sunucu erişilemez olsa bile geçmişe bakabilir, commit atabilir ve çalışmaya devam edebilirsiniz. Bu, eski merkezi sistemlere (örneğin SVN) göre büyük bir esneklik sunar.
Üç Temel Alan: Çalışma Dizini, Sahne ve Depo
Git'i anlamanın anahtarı, kodunuzun içinden geçtiği üç bölgeyi kavramaktır:
- Çalışma dizini (working directory): Üzerinde fiilen düzenleme yaptığınız dosyalar.
- Sahne alanı (staging area): Bir sonraki commit'e dahil etmek üzere hazırladığınız değişiklikler.
- Depo (repository): Kalıcı olarak kaydedilmiş commit geçmişi.
Bir dosyayı düzenlersiniz, git add ile sahneye alırsınız ve git commit ile depoya işlersiniz. Bu üç aşamalı yapı ilk bakışta fazladan bir adım gibi görünse de, aslında hangi değişikliklerin bir arada anlam ifade ettiğini seçme özgürlüğü verir.
git init
git status
git add index.php
git commit -m "Ana sayfa iskeleti eklendi"
Günlük İş Akışı
Tipik bir gün şöyle akar: sabah çalışmaya başlamadan önce uzak depodaki (remote) son değişiklikleri çekersiniz, gün boyunca küçük ve anlamlı commit'ler atarsınız, akşam da çalışmanızı paylaşırsınız.
Değişiklikleri Çekmek ve Göndermek
git pull origin main
# ... çalışırsınız, commit atarsınız ...
git push origin main
git pull, uzak depodaki değişiklikleri alıp yerel kopyanızla birleştirir. git push ise sizin commit'lerinizi uzak depoya gönderir. Bu iki komut arasındaki dengeyi kurmak, ekip çalışmasının ritmini belirler.
İyi bir commit mesajı, gelecekteki kendinize yazdığınız bir nottur. "Düzeltme yapıldı" değil, "Sepet tutarı hesaplanırken KDV iki kez ekleniyordu, düzeltildi" yazın.
Commit Sıklığı ve Boyutu
Yeni başlayanların en sık hatası, bir haftalık çalışmayı tek dev bir commit'te toplamaktır. Oysa doğrusu, her mantıksal adımı ayrı ayrı kaydetmektir. Küçük commit'ler:
- Hata ayıklamayı kolaylaştırır; sorunun hangi commit'te girdiğini bulmak basitleşir.
- Kod incelemesini (code review) hızlandırır.
- Gerektiğinde tek bir değişikliği geri almanıza izin verir.

Sık Karşılaşılan Durumlar
Git öğrenirken kaçınılmaz olarak bazı durumlarla karşılaşırsınız. Yanlış dosyayı commit'e eklediyseniz sahneden çıkarabilirsiniz:
git restore --staged config.php
Henüz commit etmediğiniz bir değişiklikten tamamen vazgeçmek isterseniz dikkatli olun; bu işlem geri alınamaz:
git restore config.php
Bir dosyanın hiç takip edilmemesini istiyorsanız (örneğin gizli anahtarlar, vendor klasörü), .gitignore dosyasına eklersiniz. Bu, projeye özgü sırların yanlışlıkla depoya sızmasını önlemenin ilk savunma hattıdır.
Berasoft Projelerinde Git Disiplini
Özel yazılım geliştirirken müşteriye teslim ettiğimiz her sürümün hangi commit'e karşılık geldiğini bilmek kritik önemdedir. Git etiketleri (tags) ile sürümleri işaretler, böylece "üretimde şu an hangi kod çalışıyor?" sorusuna kesin cevap veririz. Ekip olarak düzenli commit disiplini uygulamak, aylar sonra bir hata çıktığında onu dakikalar içinde izlemeyi mümkün kılar. Projenizin sürüm yönetimini profesyonel bir zemine oturtmak isterseniz bizimle iletişime geçebilirsiniz.
Sonuç
Git, ilk bakışta bir dizi karmaşık komuttan ibaret görünse de, altında yatan mantık son derece tutarlıdır: kodunuzun her anını güvenle kaydetmek ve gerektiğinde o ana dönebilmek. Üç temel alanı (çalışma dizini, sahne, depo) kavradığınızda ve küçük, anlamlı commit'ler atma alışkanlığı edindiğinizde, Git bir engel olmaktan çıkıp en güvenilir çalışma arkadaşınıza dönüşür. Sürüm kontrolü olmadan yazılım geliştirmek, ağsız bir ipte yürümek gibidir; bir kez düzgün kurulduğunda, geri dönmek istemezsiniz.
Bir sonraki projeniz için hazır mısınız?
Okuduklarınızı işinize uygulamak veya dijital dönüşümünüzü konuşmak isterseniz, ekibimiz bir mesaj uzağınızda.

Yorum Yap