Gitk ve Git GUI ile Görsel Depo Yönetimi

Terminal karşısında saatlerce git log --oneline --graph --all çıktısını okumaya çalışmak… Hepimiz o noktadan geçtik. Bir yerden sonra ASCII karakterlerden oluşan dal yapısını kafanızda üç boyutlu olarak canlandırmak gerçekten yorucu hale geliyor. İşte tam burada gitk ve Git GUI devreye giriyor. Bu araçları “GUI kullananlar için” diye küçümseyenler olur, ama deneyimlerime göre en hardcore terminal kullanıcıları bile karmaşık merge geçmişlerini incelerken bu araçlara el atıyor.

Neden Görsel Git Araçları?

Önce şunu netleştirelim: gitk ve Git GUI, git komutlarının yerini almak için değil, onları tamamlamak için var. Özellikle şu senaryolarda görsel araçlar ciddi zaman kazandırıyor:

  • Büyük bir projeye yeni katıldınızda ve geçmişi anlamaya çalışıyorsunuz
  • Karmaşık bir rebase veya merge işleminden önce durumu kafanızda netleştirmek istiyorsunuz
  • Bir commit’in tam olarak hangi dosyaları değiştirdiğini hızlıca görmek istiyorsunuz
  • Birden fazla branch’in birbirinden nasıl ayrıldığını ve birleştiğini görmek istiyorsunuz

Git’in kendi içinde gelen bu iki araç, ayrıca kurulum gerektirmeden kullanılabilmesi açısından da değerli. Üçüncü parti bir tool’a bağımlı olmak istemediğiniz production ortamlarında veya müşteri sunucularında bile bunlar hazır oluyor.

gitk Nedir ve Nasıl Kurulur?

gitk, Git ile birlikte gelen Tcl/Tk tabanlı bir commit geçmişi görüntüleyicisidir. Temel amacı commit grafiğini görsel olarak sunmak, her commit’in içeriğini, yazarını ve değişikliklerini göstermektir.

Çoğu Linux dağıtımında git paketi kurulduğunda gitk de geliyor, ama her zaman böyle olmayabiliyor:

# Ubuntu/Debian
sudo apt-get install gitk

# CentOS/RHEL
sudo yum install gitk

# Fedora
sudo dnf install gitk

# macOS (Homebrew ile)
brew install git-gui

Windows üzerinde Git for Windows kurduğunuzda gitk zaten dahil geliyor. Git Bash üzerinden doğrudan gitk yazarak açabilirsiniz.

Kurulumu doğrulamak için:

which gitk
gitk --version

gitk’yı Kullanmaya Başlamak

En basit kullanım şekliyle, herhangi bir git reposunun içindeyken şunu çalıştırın:

gitk

Bu komut yalnızca mevcut branch’in geçmişini gösterir. Ama çoğu zaman ihtiyacınız olan şey tüm branch’leri görmek:

gitk --all

--all flag’i benim en çok kullandığım opsiyonlardan biri. Tüm local ve remote branch’leri, tag’leri gösteriyor. Büyük bir projede bir feature branch’inin main’den ne zaman ayrıldığını, hangi commit’lerin hangi branch’lerde ortak olduğunu görmek için bu vazgeçilmez.

Belirli bir branch’in geçmişini görmek için:

gitk feature/user-authentication

Belirli bir dosyanın değişim geçmişini takip etmek istiyorsanız:

gitk -- src/auth/login.py

Bu kullanım özellikle “bu dosya neden değişti, kim değiştirdi” sorularını yanıtlamak için çok işe yarıyor. Özellikle production’da beklenmedik bir davranışla karşılaştığınızda ve belirli bir modülün geçmişini incelemeniz gerektiğinde.

Belirli bir zaman aralığını görmek için:

gitk --since="2024-01-01" --until="2024-06-30" --all

İki branch arasındaki farkı görmek, yani bir branch’te olup diğerinde olmayan commit’leri listelemek için:

gitk main..feature/payment-integration

gitk Arayüzünü Tanımak

gitk açıldığında ekran iki ana bölüme ayrılıyor. Üst kısımda commit grafiği yer alıyor; sol tarafta dal yapısı, sağ tarafta commit mesajları, yazarlar ve tarihler görünüyor. Alt kısımda ise seçili commit’in detayları: değişen dosyalar, diff içeriği ve commit metadata’sı.

Birkaç önemli kısayol tuşu:

  • F5: Görünümü yenile (yeni commit’ler geldiyse)
  • Ctrl+F: Commit mesajlarında arama yap
  • Ctrl+G: Belirli bir commit hash’ine git
  • Ctrl+Q: Kapat

Bir commit’e sağ tıkladığınızda bağlam menüsü açılıyor. Buradan o commit’i başka bir branch’e cherry-pick edebilir, yeni bir branch başlatabilir veya tag ekleyebilirsiniz. Bu işlemleri terminal’de de yapabilirsiniz elbette, ama görsel bağlamda yapmak bazen hataları önlüyor, özellikle yanlış commit’i seçme riskini azaltıyor.

Git GUI: Staging ve Commit Yönetimi

gitk bir viewer iken, Git GUI aktif değişiklik yönetimi için tasarlanmış. Yeni dosya ekleme, değişiklikleri stage’leme, commit oluşturma ve push işlemleri için kullanılıyor.

Açmak için:

git gui

Arayüz dört ana panele bölünmüş durumda. Sol üstte unstaged (henüz stage’e alınmamış) değişiklikler, sol altta staged değişiklikler, sağda ise seçili dosyanın diff’i görünüyor. Alt kısımda commit mesajı alanı ve işlem butonları yer alıyor.

Stage İşlemleri

Bir dosyadaki belirli satırları stage’lemek, yani partial staging, terminal’de git add -p ile yapılabiliyor ama Git GUI bunu çok daha görsel bir şekilde sunuyor. Diff görünümündeyken bir satıra sağ tıklayıp “Stage Hunk” veya “Stage Line” seçebiliyorsunuz. Bu özellikle bir dosyada hem refactoring hem de bug fix varken, bunları ayrı commit’lere bölmek istediğinizde çok işe yarıyor.

Gerçek Dünya Senaryosu: Hotfix Sürecinde gitk Kullanımı

Diyelim ki production’da kritik bir bug çıktı. Ekibiniz hem main hem de birkaç feature branch üzerinde çalışıyor. Hotfix’i nereye uygulayacağınızı belirlemek ve sonrasında durumu doğrulamak için gitk’dan yararlanabilirsiniz.

# Önce tüm branch durumunu görsel olarak incele
gitk --all

# Hotfix branch'ini oluştur ve geliştir
git checkout -b hotfix/critical-auth-bug main
# ... değişiklikler yapılır ...
git commit -m "fix: authentication bypass vulnerability"

# Main'e merge et
git checkout main
git merge hotfix/critical-auth-bug

# Durumu tekrar görsel olarak doğrula
gitk --all

Bu akışta gitk’yı iki kez kullanıyoruz: önce başlangıç durumunu anlamak için, sonra merge’in beklediğimiz gibi gerçekleşip gerçekleşmediğini doğrulamak için. Terminal çıktısına güvenmek yerine görsel olarak dallanma yapısını onaylamak, özellikle stresli hotfix süreçlerinde hata riskini azaltıyor.

gitk ile Commit Karşılaştırma

İki commit arasındaki farkı incelemek için gitk içinde Ctrl tuşuna basılı tutarak iki commit’i seçebilirsiniz. Bu, “bu iki release arasında ne değişti” sorusunu yanıtlamak için oldukça pratik.

Terminal alternatifini de bilmek önemli:

# Bu iki komutu çalıştırıp gitk ile karşılaştırın
git log --oneline v1.2.0..v1.3.0
gitk v1.2.0..v1.3.0

Görsel araçla terminal komutunu birlikte kullanmak, hem arama ve filtreleme gücünü hem de görselliği aynı anda elde etmenizi sağlıyor.

Git GUI ile Etkileşimli Rebase Hazırlığı

Rebase yapmadan önce Git GUI ile değişikliklerinizi düzenlemek iyi bir pratik. Özellikle birden fazla WIP commit’ini temizlemek istediğinizde:

# Önce durumu Git GUI ile gör
git gui

# Kaç commit'i rebase edeceğini belirle
git log --oneline HEAD~5

# Etkileşimli rebase başlat
git rebase -i HEAD~5

Git GUI bu süreçte doğrudan rebase editörü sunmuyor, ama değişikliklerinizi organize etmenize ve hangi commit’lerin birleştirileceğine karar vermenize yardımcı oluyor. Rebase sonrası sonucu gitk ile doğrulayabilirsiniz:

gitk --all

Büyük Takımlarda Kullanım Senaryosu

Çok geliştiricili bir projede çalışıyorsunuz ve remote’dan yeni değişiklikler geldi. Kim ne yaptı, hangi branch’ler merge edildi, sizin branch’iniz main’den ne kadar geride kaldı… Bunları hızlıca anlamak için:

# Remote'u güncelle ama merge etme
git fetch --all

# Tüm durumu görsel olarak incele
gitk --all

# Spesifik bir geliştiricinin commit'lerini filtrele
gitk --all --author="Mehmet Yilmaz"

--author filtresi özellikle code review süreçlerinde işe yarıyor. Bir ekip üyesinin son sprint’te yaptığı tüm değişiklikleri görsel olarak incelemek istediğinizde bu çok pratik.

Belirli bir kelimeyi içeren commit’leri aramak için:

gitk --all --grep="payment"

Bu komut, mesajında “payment” geçen tüm commit’leri gösteriyor. Bir özellikle ilgili tüm geçmişi izlemek için oldukça kullanışlı.

gitk Konfigürasyonu

gitk’nın görsel ayarlarını özelleştirebilirsiniz. Font büyüklüğü, renk şeması, pencere boyutu gibi ayarlar ~/.config/git/gitk veya ~/.gitk dosyasında saklanıyor:

# Mevcut gitk konfigürasyonunu görüntüle
cat ~/.gitk

# gitk geçmişinde kaç commit gösterileceğini ayarla
# Bu genellikle gitk arayüzünden Edit > Preferences ile yapılır
# Ama doğrudan dosyayı da düzenleyebilirsiniz

Büyük repolarda performans sorunu yaşıyorsanız, gösterilen commit sayısını sınırlandırmak yardımcı olabilir:

# Son 500 commit'i göster
gitk --max-count=500 --all

Git GUI Konfigürasyonu

Git GUI da kendi ayarlarını tutuyor. Özellikle spell check, font ve encoding ayarları önemli:

# Git GUI'nin kullanacağı default merge tool'u ayarla
git config --global merge.tool vimdiff

# Commit mesajı template'i ayarla
git config --global commit.template ~/.gitmessage.txt

# Template dosyasını oluştur
cat > ~/.gitmessage.txt << 'EOF'
# Başlık: 50 karakter max, imperative mood kullan
# Boş satır
# Detay: 72 karakter wrap, NEDEN ve NASIL'ı açıkla
# 
# Refs: #issue-number
EOF

Bu template ayarladıktan sonra Git GUI’yi açtığınızda commit mesajı alanında bu şablon otomatik olarak gelecek. Ekip genelinde tutarlı commit mesajları için bu yapılandırmayı .gitconfig üzerinden paylaşabilirsiniz.

Alternatif Görsel Araçlarla Karşılaştırma

gitk ve Git GUI dışında başka araçlar da var tabii. Ama burada önemli olan şu: bu araçlar git kurulumunuzla birlikte geliyor, ekstra kurulum gerektirmiyor ve her ortamda çalışıyor.

Diğer popüler seçenekler:

  • tig: Terminal tabanlı, ncurses arayüzü, çok hızlı
  • lazygit: Modern terminal UI, genç neslin favorisi
  • GitKraken: Ticari, cross-platform, güçlü ama ağır
  • VS Code Git extension: IDE içinde entegre çalışıyor

Bu araçların hepsinin kendi güçlü yönleri var. Ama uzak bir sunucuda çalışıyorsanız, sadece SSH erişiminiz varsa ve X forwarding ile gitk açabiliyorsanız, üçüncü parti tool kurma derdiniz olmadan işinizi görebilirsiniz. Benim önerim: temel araçları iyi öğrenin, sonra ihtiyacınıza göre üstüne koyun.

X Forwarding ile Uzak Sunucularda Kullanım

Uzak bir Linux sunucusunda gitk veya Git GUI kullanmak istiyorsanız X11 forwarding devreye giriyor:

# SSH bağlantısında X forwarding aktif et
ssh -X [email protected]

# Bağlandıktan sonra gitk'yı normal gibi çalıştır
cd /var/www/proje
gitk --all

macOS’tan bağlanıyorsanız XQuartz kurulu olmalı. Windows’tan bağlanıyorsanız VcXsrv veya Xming gibi bir X server kurmanız gerekiyor. Bu yöntem yavaş ağlarda biraz hissettiriyor ama kritik durumlarda işe yarıyor.

Eğer X forwarding çok yavaş çalışıyorsa, terminal tabanlı alternatif olan tig daha pratik olabilir:

sudo apt-get install tig
tig --all

Sonuç

gitk ve Git GUI, git ekosisteminin sıkça atlanan ama değerli araçları. Her şeyi terminal’den yapmak bir erdem değil, doğru aracı doğru yerde kullanmak erdem. Karmaşık bir merge geçmişini anlamak, bir hotfix’in doğru yere gittiğini doğrulamak, ya da belirli bir dosyanın zaman içinde nasıl evrildiğini izlemek için görsel araçlar gerçek zaman tasarrufu sağlıyor.

Günlük workflow’unuza bu araçları entegre etmek için birkaç öneri:

  • Büyük bir fetch/pull sonrası rutin olarak gitk --all çalıştırın
  • Code review öncesi ilgili branch’i gitk feature-branch..main ile inceleyin
  • Release öncesi gitk v1.0.0..HEAD ile ne değiştiğini görsel olarak gözden geçirin
  • Conflict çözümlerinde Git GUI’nin stage mekanizmasını kullanın

Terminal becerilerinizden taviz vermeden bu araçları iş akışınıza katmak, hem üretkenliğinizi artırır hem de hata yapma ihtimalinizi düşürür. Sonuçta amacımız git’i “doğru şekilde” kullanmak değil, projeyi doğru şekilde yönetmek.

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir