- Delta, Git, diff ve grep çıktısına söz dizimi vurgulama ve sayfa görüntüleyici özellikleri ekleyerek diff’leri daha verimli ve okunabilir şekilde incelemeye yardımcı olan bir araçtır
- Çoğu paket yöneticisinde paket adı git-delta olsa da çalıştırılabilir dosya
deltadır; ~/.gitconfig içinde core.pager = delta ayarlanarak Git pager olarak kullanılabilir
- Başlıca özellikleri bat ile aynı söz dizimi vurgulama temaları, Levenshtein düzenleme çıkarımına dayalı kelime düzeyinde diff vurgulama, yan yana karşılaştırma görünümü, satır numaraları,
n/N ile gezinme ve birleştirme çakışmalarının daha iyi gösterilmesidir
git blame, rg, git grep, grep çıktılarında da söz dizimi vurgulaması yapar; --hyperlinks ile GitHub, GitLab, SourceHut, Codeberg gibi barındırma sağlayıcılarına bağlantı biçiminde commit hash’leri oluşturabilir
- Varsayılan Git/diff çıktısına yakın kalabilir ya da yerleşim ve stili büyük ölçüde değiştirebilir; böylece diff inceleme ortamını terminal içinde ayrıntılı şekilde ayarlayabilirsiniz
Delta ne yapar
- Delta, Git, diff ve grep çıktıları için söz dizimi vurgulamalı bir sayfa görüntüleyicidir
- Kodun sürekli değiştiği ortamlarda diff okumaya ayrılan zamanı daha verimli ve keyifli hale getirmeyi amaçlar
- Diff’in yerleşimini ve stilini geniş ölçüde değiştirebilir; istenirse varsayılan Git/diff çıktısına çok yakın da tutulabilir
Kurulum ve temel ayarlar
- Kurulum belgeleri Install it sayfasında sunulur
- Çoğu paket yöneticisinde paket adı git-delta, çalıştırılabilir dosya adı ise
deltadır
- Git pager ve etkileşimli diff filtresi olarak kullanmak için
~/.gitconfig dosyasına aşağıdaki ayarlar eklenebilir
[core]
pager = delta
[interactive]
diffFilter = delta --color-only
[delta]
navigate = true # use n and N to move between diff sections
dark = true # or light = true, or omit for auto-detection
[merge]
conflictStyle = zdiff3
- Aynı ayarlar
git config --global komutuyla da uygulanabilir
git config --global core.pager delta
git config --global interactive.diffFilter 'delta --color-only'
git config --global delta.navigate true
git config --global delta.dark true # or `delta.light true`, or omit for auto-detection
git config --global merge.conflictStyle zdiff3
- Yardım için
delta -h, tam kılavuz için delta --help, çevrimiçi belgeler için user manual kullanılabilir
Diff okuma özellikleri
- Söz dizimi vurgulama, bat ile aynı söz dizimi vurgulama temalarını kullanır
- Kelime düzeyinde diff vurgulama, Levenshtein düzenleme çıkarım algoritmasını kullanır
- Yan yana karşılaştırma görünümünü ve satır kaydırmayı destekler
- Satır numarası gösterimini destekler
- Büyük diff’lerde dosyalar arasında,
log -p görünümündeki diff’ler arasında n ve N tuşlarıyla geçiş yapılabilir
- Bu özellik
--navigate ile etkinleştirilir
- Geleneksel unified diff çıktısını da Git çıktısıyla birlikte işler
- Açık/koyu terminal arka planını otomatik algılayabilir
Görünüm biçimi ve temalar
- Söz dizimi vurgulama temaları için bat tarafından sağlanan tüm temalar Delta’da da kullanılabilir
delta --show-syntax-themes --dark
delta --show-syntax-themes --light
- Yan yana karşılaştırma görünümü Side-by-side view user manual içinde belgelenmiştir
[delta]
side-by-side = true
- Yan yana karşılaştırma görünümünde varsayılan olarak satır numaraları etkindir ve hem sol hem sağ panelde söz dizimi vurgulaması uygulanır
- Yan yana karşılaştırma görünümü uzun satırları otomatik olarak sarar
- Satır numarası özelliği Line numbers user manual içinde belgelenmiştir
[delta]
line-numbers = true
Git iş akışlarına göre destek
- Birleştirme çakışmaları geliştirilmiş bir biçimde gösterilir; ilgili belgeler Merge conflicts user manual sayfasındadır
- git blame çıktısı söz dizimi vurgulamayı destekler;
--hyperlinks kullanıldığında commit’ler barındırma sağlayıcısı bağlantısı biçimine dönüştürülebilir
- Desteklenen barındırma sağlayıcıları: GitHub, GitLab, SourceHut, Codeberg
- İlgili belge: Git blame user manual
rg, git grep, grep gibi grep çıktılarında da söz dizimi vurgulaması yapar
- Git’in
--color-moved özelliğini destekler
Stil verme ve uyumluluk modu
- Diff’ten kod doğrudan kopyalanabilir;
-/+ işaretleri varsayılan olarak kaldırılır
diff-highlight ve diff-so-fancy emülasyon modları sunar
- Commit hash’leri, terminal hyperlinks biçiminde barındırma sağlayıcısı sayfalarına bağlanabilir
- Dosya yolları da işletim sisteminde açılabilir hiperlink biçimine dönüştürülebilir
- Commit, dosya ve hunk başlık bölümlerine dikkat çeken kutu/çizgi süslemeleri stillendirilebilir
- 20’den fazla stil öğesi için ön plan rengi, arka plan rengi ve yazı tipi özelliklerini içeren stil dizelerini destekler
- Stil dili, Git ile aynı renk/stil dilini kullanır
1 yorum
Hacker News görüşleri
Delta, bir kez ayarlayıp unutmalık bir araç oldu; epeydir “çıplak”
git grep/diff/blameçıktısı görmedim.Git deposu dışındaki normal diff’lerde de hep kullanıyorum; bugün
ripgrepile de birlikte kullanılabildiğini öğrendim.https://dandavison.github.io/delta/grep.html
Daha önce bahsedilen bat de aynı şekilde bir kez ayarlayıp unutmalık bir araç; bu yüzden
catiçinbattakma adını verdim, “saf cat” olan/usr/bin/catiçinse ayrı olarakvcattakma adını kullanıyorum.https://github.com/sharkdp/bat
\catkullanabilirsiniz.Daha önce gördüğüm iyi bir tespit aklımdan çıkmıyor: günümüzdeki sözdizimi vurgulama yanlış şeyi vurguluyor.
Sözdizimini insanlar zaten iyi ayırt eder; bu yüzden renklendirilmesi gereken sözdizimi değil, semboller olmalı. Farklı değişken ve fonksiyon adlarına farklı renkler vermek, “bu bir sembol” demekten ziyade “farklı sembolleri daha hızlı ayırt etmek” hedefine uyar.
Ancak bu, sözdizimini süslemekten çok daha zor olduğundan araçlar faydalı olan taraftan çok kolay olan tarafta kalıyor gibi. Sözdizimi vurgulama da epey yardımcı oluyor ama sembol eşleştirme motorunun pratikte gerçekten iyi çalışıp çalışmadığını görmek isterdim.
Orijinali nerede okuduğumu hatırlamadığım için düzgün kaynak gösteremiyorum.
Ararken şu yazıyı buldum: https://www.wilfred.me.uk/blog/2014/09/27/the-definitive-gui...
Bundan daha önce de varmış gibi geliyor ama bulabildiğim en eski açıklama yazısı 2009 tarihli: https://zwabel.wordpress.com/2009/01/08/c-ide-evolution-from...
https://difftastic.wilfred.me.uk/
https://github.com/Wilfred/difftastic
Kişisel olarak Emacs’te color-identifiers-mode kullanıyorum.
https://github.com/ankurdave/color-identifiers-mode
Bu mantığa tamamen ikna olmuş değilim ama biraz merak uyandırıyor.
Bazen bir değişkenin izini sürmek için kendim vurgulayıp kaçırdığım kullanım yeri var mı diye kontrol ediyorum; bu kullanım amacını tamamen anlıyorum. Ama birden fazla değişkeni aynı anda takip etmeye yetecek kadar renk ve kontrast var mı emin değilim; ekran da kalabalıklaşabilir.
Bir uzlaşma olarak elle en fazla 3 kadar değişkeni renklendirmek mümkün olabilir. Yine de böyle bir yardıma ihtiyaç duyulması, en başta kodun okunabilirliğinin düşük olduğuna işaret ediyor olabilir. Elbette dağınık bir kod tabanıyla uğraşmaya yardımcı olmak meşru bir kullanım.
Gösterişli değil ama yalnızca standart
gitile idare eder düzeyde kelime bazlı diff gerekiyorsa çoğu durumda şu yeterli oluyor:git diff --color-words --word-diff-regex='\w+|.'.gitconfigiçinde varsayılan olarak nasıl açabilirim?Delta işini çok iyi yapıyor ama uzun satırları kesmesi sorununa sürekli takılıyordum.
Bu yazıyı görünce durum değişmiş mi diye baktım; gerçekten değişmiş. Artık
git config --global --replace-all delta.max-line-length 0ayarlanırsa satırlar artık kesilmiyor.Bunun neden varsayılan olmadığından pek emin değilim. Değişiklik tartışması https://github.com/dandavison/delta/pull/290 adresinde.
Çok uzun satırlar, örneğin küçültülmüş
.jsdosyaları sözdizimi vurgulamadan geçirildiğinde, kesme yapılmazsa çok yavaşlayabilir.Diff konusu açılmışken, Git’in diff çıktısında can sıkıcı bulduğum şey dosya yolunu geleneksel Unix diff gibi iki dosya adıyla başlayarak göstermesi:
--- a/some/path/to/file.c+++ b/some/path/to/file.ciTerm’de dosyayı düzenleyicide açmak için sık sık
cmd-tıklama kullanıyorum ama buradaa/veb/önekleri yüzünden çalışmıyor. Git’in dosya adını daha iyi biçimlendirmesini sağlamanın bir yolu var mı? İki satır da şart değil.git config --global diff.noprefix trueÖneklerle ilgili diğer seçenekler için kılavuza bakabilirsiniz.
delta ve difftastic’i birlikte kullanıyorum; ikisi de harika.
Özellikle difftastic tree-sitter AST sözdiziminde güçlü; biraz yavaş olsa da AST’den anlayan diff gerçekten çok iyi.
Delta temiz ve çok hızlı.
Pencere boyutuna göre Delta’nın side-by-side özelliğini açıp kapatmak için kullanışlı bir ipucu. Burada bash temel alınmış; diğer shell’lere kendiniz uyarlayabilirsiniz.
function delta_sidebyside {if [[ COLUMNS -ge 120 ]]; thenDELTA_FEATURES='side-by-side'elseDELTA_FEATURES=''fi}trap delta_sidebyside WINCHCOLUMNSönünde$eksik; ayrıcaDELTA_FEATURESayarlamadan önceexportda gerekebilir.delta ve difftastic’in ikisini de kullanıyorum; ne kadar önersem az.
Terminali az da olsa kullanıyorsanız kurmanız iyi olur.
İkisi de Emacs’in Magit’inde destekleniyor, Lazygit’te de destek var.
tig de göz atmaya değer: https://jonas.github.io/tig/
Renkli normal
git diffkullandığım için bunu sevmek istiyorum ama fazla karmaşık görünüyor.Not: benim projem.
git diff’te özellikle sorun hissettiğim hiç olmamıştı.