- Terminal tabanlı Git UI aracı
lazygit, komut satırının sadeliği ile grafik arayüzün sezgiselliğini birleştirerek hızlı ve tutarlı bir çalışma ortamı sunuyor
- Tutarlılık, keşfedilebilirlik ve etkileşimlilik odağında tasarlandığı için, yeni başlayanlar da temel Git kavramlarını biliyorsa hemen kullanabiliyor
- vim tarzı tuş atamaları ve net görsel yapı sayesinde hızlı gezinme ve tekrar eden işleri kısaltma imkanı veriyor
- Satır bazında patch, interactive rebase, cherry-pick gibi karmaşık Git işlemlerini sadeleştirerek verimliliği artırıyor
- Go ile yazılmış açık kaynak bir TUI framework'ü tabanlı yapısıyla, diğer geliştirici araçlarının UX tasarımında da referans alınabilecek bir örnek oluşturuyor
LazyGit'in ortaya çıkış arka planı
- Yazar, Neovim üzerinde deney yaparken tesadüfen
lazygiti çalıştırdı ve aracın verimliliğini fark etti
- Sonrasında tüm Git iş akışını
lazygite taşıdı
- Daha önce
git gui, gitk ve CLI'yi birlikte kullanıyordu, ancak eski arayüzler ve kararsızlık nedeniyle alternatif araçlar aramaya başladı
lazygit, basit, hızlı ve CLI ile uyumlu yapısıyla güvenilirlik sağladı
LazyGit'in başlıca özellikleri
Tutarlılık (Consistency)
- Arayüz, birden fazla 'view box' yapısından oluşuyor ve her zaman aynı görsel düzeni koruyor
- Soldaki kutu seçildiğinde sağdaki içerik buna bağlı olarak değişiyor
- Git terminolojisini ve soyutlamalarını olduğu gibi kullandığı için öğrenme eğrisini azaltıyor
- Örnek:
bisect, hunk gibi standart Git kavramları doğal biçimde öğrenilebiliyor
- vim tuş atamalarını (
h/j/k/l, q, /, y, c, a, f, p, r vb.) benimseyerek hızlı kullanım sağlıyor
- Komut sayısını sınırlayıp "tek işi iyi yap" anlayışındaki Unix felsefesini takip ediyor
Keşfedilebilirlik (Discoverability)
- Çalıştırıldığında ihtiyaç duyulan bilgileri anında gösteriyor
- Mevcut depo, branch, staging durumu, son commit'ler, stash, son komut, kısayollar vb.
- Görsel aşırı yük oluşturmadan bilgi sunduğu için bağlam değişimini en aza indiriyor
- Alt footer üzerinden ya da
? tuşuyla kısayollar anında görülebiliyor
- Kullanıcı, istediği anda mevcut konumunu ve durumunu sezgisel olarak anlayabiliyor
Etkileşimlilik (Interactivity)
- Karmaşık Git işlemlerini etkileşimli bir arayüzle yönlendiriyor
- Örnek: push sırasında upstream farkı uyarısı, rebase sırasında interactive olup olmayacağının sorulması
- Rebase, çakışma çözümü ve branch değiştirme süreçlerinde otomatik onay ve sonraki adım önerileri sunuyor
pick/drop/squash komutlarını doğrudan yazmaya gerek kalmadan tuş kombinasyonlarıyla işlem yapılabiliyor
- Minimum düzeyde kesintiyle kullanıcının güvenini ve hızını artırıyor
Geliştirilmiş Git iş akışı
lazygit, yeni bir iş akışı eklemek yerine mevcut Git özelliklerini daha güvenli ve daha hızlı kullanmayı sağlıyor
- Satır ve hunk bazında patch seçimi özelliğiyle kodu ayrıntılı biçimde geri alma imkanı veriyor
- Commit'in yalnızca bir kısmını geri almak veya ayırmak mümkün
- Başlıca kısayol iş akışı örnekleri
- Mevcut commit'i düzenleyip push etme:
2 space A P enter
- Yeni commit oluşturup push etme:
2 space c <başlık> P
- Branch rebase etme:
3 r i ... m c
- Commit silme:
4 d
- Commit bölme:
4 enter enter <c-p> n <başlık> enter
- Cherry-pick:
3 4 C 3 4 V
- Tekrarlı kullanımda kısayollar doğal biçimde alışkanlığa dönüşüyor ve çalışma hızını büyük ölçüde artırıyor
Geliştirici araçları UX'inden çıkarılacak dersler
lazygitin sadelik, tutarlılık, keşfedilebilirlik, makul varsayılanlar ve etkileşimlilik yaklaşımı, mükemmel geliştirici aracı tasarım ilkeleri sunuyor
- Derin yapılandırılabilirlik, genişletilebilirlik ve açık kaynak katkı ekosistemi sağlıklı biçimde korunuyor
- %100 Go diliyle yazılmış TUI framework'ü (
gocui) tabanlı olması, başka araçların geliştirilmesinde de değerlendirilebilecek bir temel sunuyor
- Benzer UX kalıplarını kullanan yeni CLI/TUI araçlarının geliştirilebileceğini gösteriyor
Sonuç
lazygit, basit bir Git UI'ın ötesinde geliştirici üretkenliği ve UX tasarımı için örnek bir vaka olarak değerlendiriliyor
- Yapay zeka destekli özellikler gelişse bile, doğruluk ve güvenilirlik gerektiren sürüm kontrolü alanında hâlâ temel bir rol oynuyor
- Açık kaynak topluluğunun katkısı ve iş birliğiyle gelişimini sürdürüyor
- Herkes tarafından kullanılabilir ve katkı verilebilir; hızlı ve sezgisel bir Git deneyimi sunuyor
1 yorum
Hacker News görüşleri
Eskiden magit, neogit, lazygit gibi klavye merkezli git TUI’lerini seviyordum
Ama artık git yerine jujutsu(jj) kullanıyorum
jj CLI’a alıştıktan sonra jjui kullanmaya başladım
Sık sık commit bölmem gerekiyor ve hunk.nvim eklentisi bu konuda çok kullanışlı
Ayrıca jj conflict çözümünde jj-diffconflicts en iyisi
Artık jj ile commit grafiğini kod satırlarını taşır gibi doğal şekilde düzenleyebiliyorum
Eski bir commit’ten gereksiz bir hunk kaldırınca sonraki commit’lerde zincirleme conflict oluşuyor; bunu otomatik halleden bir araç var mı diye merak ediyorum
Diff’in dosyalara göre ayrılmış görünmesi hoşuma gidiyor; tek sebep bu
Yine de jj’ye özel GUI seçenekleri daha fazla olsa iyi olurdu. Birden fazla değişikliği tek bakışta görmek istediğimde gg kullanıyorum ama side-by-side diff yok
git butler videolarını görünce jj arayüzünün de o yönde gelişmesi güzel olur diye düşündüm
Değişiklikleri sürükleyerek taşıyabildiğin ya da split/rebase işlemlerini etkileşimli yapabildiğin bir GUI olsa harika olurdu
Her takımın git flow’u farklı ve geliştiriciler ya gereksiz mikro optimizasyonlara saplanıyor ya da öğrenmek istemiyor
Sonuçta her takımın bir git uzmanına ihtiyaç duyduğu bir yapı ortaya çıkıyor
Keşke tek bir çalışma biçimini zorlayan bir araç olsa
Komik gelebilir ama şimdiye kadar kullandığım git UI’ları içinde SourceTree kadar iyisini görmedim
Basit işler yaparken CLI’dan çok daha rahat ve dosya durumu ile geçmiş görünümü gerçekten çok iyi
Hunk ya da satır bazında stage/unstage yapmak da kolay
Tek eksiği Linux sürümünün olmaması. Başka araçların hepsini denedim ama sonunda yine buna dönüyorum
Son zamanlarda lazygit de kullandım; TUI’ler arasında gayet iyiydi
Otomatik yenileme olmadığı için CLI ile çakışmıyor
Git Extensions Commit belgeleri
Sayısız bug ve garip sorun yüzünden zaman kaybettim. Lütfen SourceTree’yi bırakın
git’i ne kadar doğrudan kullanırsam git CLI arayüzünün mantıksızlığını o kadar fazla hissediyorum
İki yıldır jj kullanıyorum ve artık git CLI’a geri dönebileceğimi sanmıyorum
İnsanların git’te kafası karışıp sorun çıkardığını o kadar sık gördüm ki, artık doğrudan başka bir şey kullanmalarını öneriyorum
Editörde değişiklikleri bölüp commit etmeyi seviyorum ama jj’nin editör entegrasyonu zayıf olduğu için commit’ler sonunda dağınık oluyor
İsmi yüzünden uzak duranlar var ama GitHub Desktop aslında oldukça iyi
GitHub dışındaki repo’larda da sorunsuz çalışıyor ve commit düzenleme ile dosya/satır bazında cherry-pick işlemleri kolay
Her karmaşık işleme açıklamalar eşlik ettiği için özellikle yeni başlayanlar için çok iyi
Merge ya da grafik özellikleri zayıf ama yine de git CLI’dan çok daha iyi olduğunu düşünüyorum
Takıma yeni biri katıldığında hep GH Desktop kullanmasını sağlıyorum. Hata azalıyor, kavrayış hızlanıyor
git konusunda kendine güvenmeyen biri için en iyi seçenek
Öte yandan git’e fazla güvenen junior geliştiricilerin repo’yu mahvettiğini çok gördüm
Bu yüzden ekip arkadaşlarıma GH Desktop’ı güçlü şekilde tavsiye ediyorum
Birçok git kullanıcısı git-absorb’u bilmiyor
Her türlü git flow’a iyi uyuyor ve stage edilmiş değişiklikleri birden fazla commit’e bölerek düzeltme işinin acısını azaltıyor
TUI’lerin çoğunda böyle bir özellik yok
Rust tabanlı araçları, bağımlılıkları fazla olduğu için, pek tercih etmiyorum
Güvenim azaldığı için sonunda bıraktım. Fazla sihirli çalışması rahatsız edici geliyor
Ben hâlâ tig tercih ediyorum
Özelliği daha az ama arayüzü basit ve hızlı
Çoğunlukla incremental index eklemek için kullanıyorum
VS Code ücretsiz, platformlar arası ve zaten birçok kişi kullanıyor
git GUI’si de iyi ve genel workflow’ların hepsini karşılıyor
Normalde CLI kullanıyorum ama projeyi VS Code’da açık tuttuğumda GUI ile yapmak çoğu zaman daha hızlı ve daha sezgisel oluyor
LazyVim + tmux birleşimi git kullanım şeklimi tamamen değiştirdi
ctrl-g’ye basınca geçerli dizinde tmux floating pane içinde lazygit açılacak şekilde ayarladım
Neovim’in içine girmen ya da arayüz değiştirmen gerekmiyor; doğrudan git işi yapabiliyorsun
Terminal merkezli workflow’da en esnek ve akıcı deneyim bu
~/.tmux.confdosyasına eklenirsectrl-b ctrl-gile lazygit popup’ı açıpqile kapatabiliyorsunBen git işlerini sesli komut + AI ile yapıyorum. Ya da ctrl-r’nin zaten yeterli bir arayüz olduğunu düşünüyorum
Henüz kimse bahsetmedi ama Gitu da gayet iyi bir istemci