3 poin oleh GN⁺ 2024-11-09 | 1 komentar | Bagikan ke WhatsApp
  • Delta adalah alat yang menambahkan penyorotan sintaks dan fungsi penampil halaman pada output Git, diff, dan grep, membantu membaca diff dengan lebih efisien dan lebih enak dilihat
  • Di sebagian besar package manager, nama paketnya adalah git-delta, tetapi executable-nya adalah delta; dapat digunakan sebagai Git pager dengan mengatur core.pager = delta di ~/.gitconfig
  • Fitur utamanya meliputi tema penyorotan sintaks yang sama dengan bat, penyorotan diff per kata berbasis inferensi edit Levenshtein, tampilan perbandingan berdampingan, nomor baris, navigasi n/N, dan peningkatan tampilan konflik merge
  • Output git blame, rg, git grep, dan grep juga diberi penyorotan sintaks; dengan --hyperlinks, hash commit dapat dibuat dalam format tautan penyedia hosting seperti GitHub, GitLab, SourceHut, dan Codeberg
  • Output dapat dipertahankan tetap mirip dengan output Git/diff standar atau tata letak dan gayanya dapat diubah secara besar-besaran, sehingga lingkungan peninjauan diff bisa disesuaikan secara rinci di dalam terminal

Apa yang dilakukan Delta

  • Delta adalah penampil halaman dengan penyorotan sintaks untuk output Git, diff, dan grep
  • Tujuannya adalah membuat waktu membaca diff menjadi lebih efisien dan menyenangkan di lingkungan tempat kode terus berubah
  • Tata letak dan gaya diff dapat diubah secara luas, dan jika diinginkan juga bisa dipertahankan sangat dekat dengan output Git/diff standar

Instalasi dan konfigurasi dasar

  • Dokumentasi instalasi tersedia di Install it
  • Di sebagian besar package manager, nama paketnya adalah git-delta, dan nama executable-nya adalah delta
  • Tambahkan konfigurasi berikut ke ~/.gitconfig untuk menggunakannya sebagai Git pager dan filter diff interaktif
[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
  • Konfigurasi yang sama juga dapat diterapkan dengan perintah git config --global
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
  • Bantuan dapat dilihat dengan delta -h, manual lengkap dengan delta --help, dan dokumentasi online di user manual

Fitur membaca diff

  • Penyorotan sintaks menggunakan tema penyorotan sintaks yang sama dengan bat
  • Penyorotan diff per kata menggunakan algoritme inferensi edit Levenshtein
  • Mendukung tampilan perbandingan berdampingan dan pembungkusan baris
  • Mendukung tampilan nomor baris
  • Dapat berpindah antarfile dalam diff besar, atau antardiff pada tampilan log -p, dengan tombol n dan N
    • Fitur ini diaktifkan dengan --navigate
  • Output unified diff tradisional juga diproses bersama output Git
  • Dapat mendeteksi latar terminal terang/gelap secara otomatis

Cara tampilan dan tema

  • Tema penyorotan sintaks: semua tema yang disediakan bat juga dapat digunakan di Delta
    • delta --show-syntax-themes --dark
    • delta --show-syntax-themes --light
  • Tampilan perbandingan berdampingan didokumentasikan di Side-by-side view user manual
[delta]
    side-by-side = true
  • Secara default, tampilan perbandingan berdampingan mengaktifkan nomor baris, dan penyorotan sintaks diterapkan pada panel kiri maupun kanan
  • Tampilan perbandingan berdampingan membungkus baris panjang secara otomatis
  • Fitur nomor baris didokumentasikan di Line numbers user manual
[delta]
    line-numbers = true

Dukungan per operasi Git

  • Tampilan konflik merge disediakan dalam format yang ditingkatkan, dengan dokumentasi terkait di Merge conflicts user manual
  • Output git blame mendukung penyorotan sintaks, dan saat menggunakan --hyperlinks, commit dapat dibuat dalam format tautan penyedia hosting
    • Penyedia hosting yang didukung: GitHub, GitLab, SourceHut, Codeberg
    • Dokumentasi terkait: Git blame user manual
  • Output grep seperti rg, git grep, dan grep juga diberi penyorotan sintaks
  • Mendukung fitur --color-moved milik Git

Styling dan mode kompatibilitas

  • Kode dapat langsung disalin dari diff, dan marker -/+ dihapus secara default
  • Menyediakan mode emulasi diff-highlight dan diff-so-fancy
  • Hash commit dapat ditautkan ke halaman penyedia hosting dalam format hyperlinks terminal
  • Path file juga dapat dibuat dalam format hyperlink yang bisa dibuka di sistem operasi
  • Dekorasi kotak/garis yang menarik perhatian ke bagian header commit, file, dan hunk dapat di-styling
  • Mendukung string gaya yang mencakup warna foreground, warna background, dan atribut font untuk lebih dari 20 elemen styling
    • Bahasa styling menggunakan bahasa warna/gaya yang sama seperti Git

1 komentar

 
GN⁺ 2024-11-09
Komentar Hacker News
  • Delta adalah alat yang cukup disetel sekali lalu dilupakan, dan sudah cukup lama saya tidak melihat output git grep/diff/blame yang “mentah”
    Saya juga selalu memakainya untuk diff biasa di luar repositori Git, dan hari ini baru tahu bahwa alat ini juga bisa dipakai bersama ripgrep
    https://dandavison.github.io/delta/grep.html
    bat yang sudah disebutkan juga sama-sama alat yang disetel sekali lalu dilupakan, jadi saya membuat alias cat ke bat, dan menyisihkan /usr/bin/cat, “cat asli”, dengan alias vcat
    https://github.com/sharkdp/bat

    • Untuk mencegah ekspansi alias, gunakan \cat
  • Ada pengamatan bagus yang pernah saya baca dulu dan terus teringat: syntax highlighting saat ini menyorot hal yang salah
    Manusia sudah cukup baik membedakan sintaks, jadi yang seharusnya disorot bukan sintaksnya, melainkan simbol. Jika setiap nama variabel dan nama fungsi yang berbeda diberi warna berbeda, tujuannya bukan “ini adalah simbol”, melainkan “membedakan simbol yang berbeda dengan lebih cepat”
    Namun karena itu jauh lebih sulit daripada menghias sintaks, alat-alat tampaknya tetap berada di sisi yang mudah, bukan sisi yang lebih berguna. Syntax highlighting memang cukup membantu, tetapi saya ingin melihat apakah mesin pencocokan simbol benar-benar bekerja dengan baik
    Saya tidak ingat di mana membaca tulisan aslinya, jadi tidak bisa mencantumkan sumber dengan benar
    Saat mencari, saya menemukan artikel ini: https://www.wilfred.me.uk/blog/2014/09/27/the-definitive-gui...

    • Di KDevelop, ini disebut semantic highlighting, bukan syntax highlighting
      Sepertinya sudah ada lebih awal dari itu, tetapi tulisan penjelasan paling awal yang bisa saya temukan adalah artikel tahun 2009: https://zwabel.wordpress.com/2009/01/08/c-ide-evolution-from...
    • Penulis artikel itu juga membuat difftastic, “diff struktural yang memahami sintaks”, menggunakan treesitter
      https://difftastic.wilfred.me.uk/
      https://github.com/Wilfred/difftastic
    • Sepenuhnya setuju. Awalnya terlihat asing, tetapi setelah terbiasa saya jadi lebih menyukai cara highlighting seperti ini
      Secara pribadi saya memakai color-identifiers-mode di Emacs
      https://github.com/ankurdave/color-identifiers-mode
    • Nama variabel juga bisa dibedakan dengan cukup baik. Terutama jika sintaksnya sendiri sudah disorot, kita bisa tahu persis bagian mana yang harus dilihat dan bagian mana yang tidak perlu dilihat
      Saya tidak sepenuhnya terbujuk oleh logika itu, tetapi agak penasaran
      Kadang saya menyorot variabel secara manual untuk menelusurinya dan memastikan tidak ada penggunaan yang terlewat; untuk kegunaan itu saya cukup paham. Namun saya tidak tahu apakah warna dan kontrasnya cukup untuk menelusuri beberapa variabel sekaligus, dan layar juga bisa jadi berantakan
      Sebagai kompromi, mungkin bisa dengan mewarnai secara manual maksimal sekitar 3 variabel saja. Namun jika bantuan seperti itu diperlukan, itu mungkin sejak awal merupakan tanda bahwa keterbacaan kodenya rendah. Tentu saja membantu menangani codebase yang berantakan adalah penggunaan yang sah
  • Tidak mewah, tetapi jika yang dibutuhkan adalah diff per kata yang lumayan bagus hanya dengan git standar, ini sering kali sudah cukup
    git diff --color-words --word-diff-regex='\w+|.'

    • Bagaimana cara mengaktifkan ini sebagai default di .gitconfig?
  • Delta menjalankan tugasnya dengan sangat baik, tetapi saya terus tersandung masalah baris panjang yang dipotong
    Setelah melihat tulisan ini, saya mengecek apakah situasinya sudah berubah, dan ternyata memang sudah. Sekarang jika mengatur git config --global --replace-all delta.max-line-length 0, baris tidak lagi dipotong
    Saya tidak begitu paham mengapa ini bukan nilai default. Diskusi perubahannya ada di https://github.com/dandavison/delta/pull/290

    • Alasan mengapa itu bukan default tertulis apa adanya di PR tersebut
      Karena menyorot sintaks pada baris yang sangat panjang, misalnya file .js yang sudah diminify, bisa menjadi sangat lambat jika tidak dipotong
  • Mumpung membahas diff, hal yang menyebalkan dari output diff Git adalah jalur file ditampilkan dengan dimulai oleh dua nama file seperti diff Unix tradisional
    --- a/some/path/to/file.c
    +++ b/some/path/to/file.c
    Saya sering membuka file di editor dengan cmd-klik di iTerm, tetapi di sini tidak berfungsi karena prefiks a/ dan b/. Apakah ada cara agar Git memformat nama file dengan lebih baik? Dua baris itu juga sebenarnya tidak selalu diperlukan

    • git config --global diff.noprefix true
      Untuk opsi lain terkait prefiks, lihat manualnya
  • Saya memakai kombinasi delta dan difftastic, dan keduanya luar biasa
    Difftastic khususnya kuat pada sintaks AST tree-sitter, jadi meski agak lambat, diff yang memahami AST benar-benar bagus
    Delta rapi dan sangat cepat

  • Ini tip berguna untuk mengaktifkan dan menonaktifkan fitur side-by-side Delta tergantung ukuran jendela. Di sini contohnya untuk bash; shell lain bisa disesuaikan sendiri
    function delta_sidebyside {
    if [[ COLUMNS -ge 120 ]]; then
    DELTA_FEATURES='side-by-side'
    else
    DELTA_FEATURES=''
    fi
    }
    trap delta_sidebyside WINCH

    • Tanda $ sebelum COLUMNS hilang, dan kemungkinan besar export juga diperlukan sebelum menetapkan DELTA_FEATURES
  • Saya memakai delta dan difftastic, dan rasanya tidak ada rekomendasi yang terlalu berlebihan untuk keduanya
    Jika Anda memakai terminal sedikit saja, sebaiknya pasang

    • Difftastic dan Delta tidak hanya bekerja di terminal murni
      Keduanya didukung di Magit milik Emacs, dan juga didukung di Lazygit
    • Saya sudah memakai difftastic cukup lama, dan penasaran bagaimana cara memakai keduanya bersama-sama
  • tig juga layak dicoba: https://jonas.github.io/tig/

  • Karena selama ini saya memakai git diff biasa yang berwarna, saya sebenarnya ingin menyukai ini, tetapi terlihat terlalu rumit

    • diffr mungkin cocok untuk Anda: https://github.com/mookid/diffr
      Sebagai catatan, ini proyek saya
    • Saya mendapat kesan yang sama. Saya tidak pernah merasa git diff asli punya masalah berarti