10 poin oleh GN⁺ 2024-01-08 | 1 komentar | Bagikan ke WhatsApp
  • GitUI adalah alat yang menghadirkan kemudahan dan kenyamanan Git GUI di dalam terminal, berangkat dari pengalaman pengguna yang menghadapi masalah Git GUI lama yang macet atau lambat pada repositori besar
  • Fitur utamanya mencakup operasi khusus keyboard, bantuan berbasis konteks, pemeriksaan perubahan·commit·amend, stage/unstage/revert/reset pada tingkat file·hunk·baris, stash, push/fetch, pengelolaan branch, serta pencarian log commit dan pemeriksaan diff
  • Dalam perbandingan yang mem-parsing lebih dari 900 ribu commit repositori Git Linux, gitui mencatat 24 detik dan penggunaan memori 0.17GB, sedangkan lazygit mencatat 57 detik·2.6GB, dan tig 4 menit 20 detik·1.3GB
  • Target sebelum versi 1.0 mencakup visualisasi struktur branch pada tab log dan interactive rebase, dan ada keterbatasan yang sudah diketahui pada git-lfs, sparse repo, serta penanganan otomatis credential.helper untuk HTTPS
  • Saat ini alat ini belum sepenuhnya menggantikan Git shell, dan lebih dekat sebagai alat pendamping yang melengkapi pekerjaan yang kurang nyaman dilakukan di Git shell seperti stash atau staging per baris·hunk

Alat yang membawa pengalaman Git GUI ke terminal

  • GitUI adalah alat open source yang menghadirkan pengalaman pengguna dan kenyamanan Git GUI di terminal
  • Motivasi pengembangannya berasal dari pengalaman bahwa meskipun sebagian besar pekerjaan Git dilakukan di terminal, untuk tugas seperti index, commit, diff, stash, blame, dan log, Git GUI tetap sering digunakan
  • Git GUI populer yang sudah ada memiliki masalah gagal, tidak responsif, atau menjadi tidak bisa dipakai pada repositori yang sangat besar
  • GitUI menargetkan pengalaman Git GUI di dalam terminal yang portable, fast, free, dan opensource

Cakupan fitur

  • Model operasinya berpusat pada kontrol khusus keyboard dan bantuan berbasis konteks, sehingga pengguna tidak perlu menghafal banyak shortcut
  • Pekerjaan terkait perubahan mencakup hal berikut
    • inspect perubahan, commit, amend
    • termasuk hook pre-commit, commit-msg, post-commit, prepare-commit-msg
    • stage, unstage, revert, reset pada tingkat file, hunk, dan baris
  • Pekerjaan alur repositori juga didukung
    • simpan, pop, apply, drop, inspect stash
    • push ke remote, fetch dari remote
    • membuat, mengganti nama, menghapus, checkout branch, melihat remotes
    • menelusuri log commit dan mencari, memeriksa diff dari perubahan yang sudah di-commit
  • UI dan perilaku internal mencakup UI terminal yang responsif, Git API asinkron untuk operasi yang lancar, serta dukungan submodule
  • GPG commit signing didukung, tetapi ada batasan terkait #97

Hasil benchmark

  • Dalam presentasi RustBerlin meetup, lazygit, tig, dan gitui dibandingkan dengan mem-parsing seluruh repositori Git Linux
  • Hasil perbandingannya sebagai berikut
    • gitui: 24 detik, memori 0.17GB, biner 10MB, tidak ada freeze, tidak ada crash
    • lazygit: 57 detik, memori 2.6GB, biner 25MB, ada freeze, crash kadang terjadi
    • tig: 4 menit 20 detik, memori 1.3GB, biner 0.6MB, freeze kadang terjadi, tidak ada crash
  • gitui mencatat nilai terendah untuk waktu dan memori dalam perbandingan ini

Roadmap sebelum 1.0 dan keterbatasan yang diketahui

  • Ada dua target utama sebelum disebut versi 1.0
    • visualisasi struktur branch di tab log: #81
    • interactive rebase: #32
  • Keterbatasan saat ini mencakup hal berikut
    • belum mendukung git-lfs: #2812
    • belum mendukung sparse repo: #1226
    • pada HTTPS, credential.helper harus diatur secara eksplisit: #800
  • Saat ini GitUI belum sepenuhnya menggantikan Git shell, dan penggunaan keduanya bersama-sama merupakan pendekatan yang cocok
  • Prioritasnya berfokus pada fitur yang kurang nyaman di Git shell, seperti stash dan staging per baris·hunk
  • Proyek ini saat ini merupakan spare time project, dan dibutuhkan bantuan untuk menjadikan GitUI sebagai one stop solution

Instalasi dan build

  • GitUI berada dalam status beta dan mungkin masih memiliki bug serta fitur yang belum lengkap
  • Untuk penggunaan pribadi, alat ini cukup stabil, dan juga dipakai dalam pengembangan GitUI sendiri
  • Dapat diinstal melalui berbagai package manager
    • Arch Linux: pacman -S gitui
    • Fedora: sudo dnf install gitui
    • openSUSE: sudo zypper install gitui
    • Homebrew: brew install gitui
    • MacPorts: port install gitui
    • Winget: winget install gitui
    • Scoop: scoop install gitui
    • Chocolatey: choco install gitui
    • Mise: mise use -g gitui@latest
    • Termux: pkg install gitui
    • Anaconda: conda install -c conda-forge gitui
  • Biner rilis tersedia untuk Linux, macOS, dan Windows
    • Linux memiliki paket x86_64, aarch64, arm, dan armv7
    • macOS memiliki paket arm64 dan Intel x86
    • Windows memiliki biner tunggal 64bit dan paket instalasi MSI 64bit
  • Persyaratan build adalah sebagai berikut
    • versi minimum rust/cargo yang didukung adalah 1.88
    • untuk build dependensi OpenSSL dibutuhkan perl 5.12 atau lebih baru serta compiler C
    • untuk menjalankan seluruh test suite dibutuhkan Python yang dapat dipanggil dengan python
  • Dengan Cargo, build dan instalasi dapat dimulai dengan perintah cargo install gitui --locked
  • Cargo feature trace-libgit mengaktifkan tracing libgit2, dan berfungsi jika libgit2 dibangun dengan -DENABLE_TRACE=ON
  • Feature ini aktif secara default, dan untuk menonaktifkannya gunakan cargo install --no-default-features

Konfigurasi, diagnosis, dan kustomisasi

  • Logging diaktifkan dengan gitui -l
  • Lokasi file log berbeda menurut platform
    • macOS: $HOME/Library/Caches/gitui/gitui.log
    • Linux with XDG: $XDG_CACHE_HOME/gitui/gitui.log
    • Linux: $HOME/.cache/gitui/gitui.log
    • Windows: %LOCALAPPDATA%/gitui/gitui.log
  • GitUI seharusnya bekerja otomatis baik pada tema terminal terang maupun gelap
  • Tema warna dapat dikustomisasi sesuai keinginan mengikuti THEMES.md
  • Key binding dapat dikustomisasi mengikuti KEY_CONFIG.md, dan dapat diatur ke gaya binding vim
  • Proyek yang menjadi inspirasi adalah lazygit, tig, GitUp, git-brunch
  • Untuk GitUp, ada tambahan target untuk menemukan cara menggunakan map view di alat terminal

1 komentar

 
GN⁺ 2024-01-08
Komentar Hacker News
  • Begitu dipasang, jendela xterm terlalu kecil jadi saya perbesar, lalu saya mencoba mengecilkan area pohon file dengan menyeret tepinya, tetapi tidak bisa
    Saya ingin melihat diff lebih besar, dan karena nama file pendek, sebagian besar area pohon itu terbuang percuma, tetapi di bantuan H juga tidak ada tombol terkait, jadi sepertinya ukuran juga tidak bisa diatur dengan keyboard
    Bahkan kalau memang bisa lewat keyboard, untuk kasus seperti ini resize dengan mouse jauh lebih mudah dan cepat, dan akan bagus juga kalau ada pengaturan lewat keyboard untuk saat mouse tidak bisa dipakai, misalnya di lingkungan SSH yang rusak

    • Menambahkan dukungan mouse terminal ke shortcut keyboard benar-benar berguna
      Bahkan di Vim, bagian yang masih saya pakai dengan trackpad/mouse adalah scroll dan pengaturan ukuran jendela, dan tidak ada alasan keduanya tidak bisa disediakan juga lewat SSH
      Sepertinya itu juga akan jadi tambahan fitur yang bagus di sini
  • lazygit disebut sebagai inspirasi proyek ini, tetapi sebagai pengguna lazygit saya penasaran apa yang kurang sampai perlu proyek baru sepenuhnya
    Saya sangat terbantu dengan lazygit

    • Sulit menilai apakah metodologinya valid, tetapi dari sudut pandang manajer angkanya cukup mengesankan
      Untuk presentasi meetup RustBerlin, mereka mem-parsing seluruh repositori Git Linux untuk membandingkan lazygit, tig, dan gitui, dan repositori itu punya lebih dari 900 ribu commit
      gitui mencatat 24 detik, memori 0,17GB, biner 1,4MB, tanpa hang, tanpa crash, sedangkan lazygit 57 detik, 2,6GB, 16MB, ada hang, kadang crash, dan tig 4 menit 20 detik, 1,3GB, 0,6MB, kadang hang, tanpa crash
    • Saya sudah memakai lazygit setiap hari selama bertahun-tahun dan mencoba ini juga beberapa bulan lalu, dan ini terlihat seperti contoh alat yang hampir sempurna ditulis ulang dalam Rust
      Setahu saya tidak ada fitur yang tidak dimiliki lazygit, malah ada beberapa fitur lazygit yang justru tidak ada di sini
    • Motivasinya tertulis di README
      Sebagian besar pekerjaan Git dilakukan di terminal, tetapi untuk hal-hal seperti index, commit, diff, stash, blame, dan log, mereka jadi sering memakai Git GUI, dan Git GUI populer disebut gagal atau tidak responsif pada repositori yang sangat besar sehingga tidak bisa dipakai
  • Pernyataan “Git GUI populer gagal atau tidak responsif pada repositori yang sangat besar sehingga tidak bisa dipakai” hanya pernah saya lihat saat ada pohon direktori yang sangat dalam dan belum dimasukkan ke .gitignore, sehingga git status lambat baik di command line maupun magit
    Dalam kasus seperti ini saya rasa tidak ada perbedaan antara penggunaan Git lewat GUI/TUI/command line
    Apakah antarmuka Git lain gagal lebih parah daripada Git itu sendiri?

    • Pola kegagalan Magit menurut saya berasal dari sub-operasi yang mengambil informasi diff di halaman status
      Bahkan saat masalah yang sama terjadi, git status di command line selesai hampir seketika
      Kalau ingin menampilkan banyak informasi, memang tak terhindarkan butuh waktu, tetapi magit di beberapa titik bekerja terlalu eager sehingga alur kerjanya jadi jauh lebih mahal daripada alur Git mentah
    • Saya tidak pernah melakukan merge besar di magit; untuk hal seperti itu saya pakai Git CLI
    • Kalau begitu justru mengejutkan
      Git UI milik IntelliJ ditulis dalam Java dan bahkan terintegrasi di dalam IDE, tetapi tetap cukup cepat, jadi Git UI eksternal seharusnya tidak masalah
  • Tulisan terkait:
    GitUI: Terminal UI for Git - https://news.ycombinator.com/item?id=32864036 - September 2022, 90 komentar
    Terminal-UI for Git written in Rust - https://news.ycombinator.com/item?id=25504811 - Desember 2020, 1 komentar

  • Apakah ada yang pernah membuat UI klik dan drag untuk Git?
    Maksud saya UI yang memungkinkan bekerja cukup dengan menyeret branch ke tempatnya

    • Git GUI favorit saya adalah Fork: https://git-fork.com/
      Mendukung drag and drop untuk berbagai operasi seperti merge, rebase, stage/unstage, dan mungkin masih ada lagi
    • Untuk pekerjaan dasar saya pakai GitHub Desktop, dan untuk yang rumit saya pakai CLI
      Ini klien Git yang cukup sederhana, tetapi ada sedikit fitur drag untuk hal seperti cherry-pick commit
    • Saya pernah melihat ekstensi yang menjadikan itu salah satu fitur jualannya, meski belum pernah mencobanya
      https://marketplace.visualstudio.com/items?itemName=trunkflo...
    • Bahkan setelah 10 tahun, saat perlu klik dan drag di UI saya masih paling sering memakai SourceTree
  • Saya mencoba semua alat seperti ini, tetapi selalu ada satu fitur inti yang hilang atau tidak bekerja sesuai yang saya inginkan, jadi akhirnya saya kembali ke tig
    Di GitUI saya tidak menemukan indikator yang menunjukkan struktur branch dengan baik, misalnya di tampilan Log
    Akan bagus jika ada alat yang menampilkan struktur branch dengan baik untuk mempertimbangkan rebase

  • Kelihatannya bagus, jadi saya berniat mencobanya
    Saya berharap suatu hari GitExtensions di-porting menjadi aplikasi Linux native
    Saya sudah mencoba puluhan UI, tetapi rasanya tidak ada yang menandinginya

    • Setelah pindah ke Linux, satu-satunya aplikasi Windows yang saya rindukan setiap hari adalah TortoiseGit
      Sampai sekarang belum ada Git UI yang membuat sistem berbasis menu konteks terasa senatural TortoiseGit
    • Saya selalu heran ternyata sangat sedikit developer yang mengenal GitExtensions
      Git UI lain yang mendekatinya hanya Tortoise, tetapi dulu saya cuma pernah memakai varian hg-nya
    • Gitex sangat bagus
      Di Linux saya masih memakai versi mono 2.x sampai sekarang
  • Ini terlihat sangat mirip dengan plugin Neovim neogit yang mulai saya pakai sekitar sebulan lalu
    Key binding-nya agak kasar, dan butuh sekitar satu jam sampai benar-benar terbiasa dengan keseluruhan alur kerjanya, tetapi setelah terbiasa, ini jauh lebih cepat daripada cara lama saya yaitu men-suspend neovim lalu memakai Git langsung dari shell
    0: https://github.com/NeogitOrg/neogit

  • Salah satu hal yang saya khawatirkan dari alat UI adalah banyak yang menyembunyikan perintah sebenarnya dari pengguna, sehingga nanti sulit menalar apa yang salah dan bagaimana menghindarinya di masa depan
    Misalnya, beberapa alat bisa menambahkan flag yang cukup opinionated dan tidak sesuai dengan alur CLI biasa
    Saya tidak tahu apakah ini berlaku untuk alat ini juga, tetapi ini bisa menjadi masukan yang menarik untuk kategori alat seperti ini

    • Karena itu saya memakai dan menyukai GitExtensions di Windows
      Semua perintah yang dijalankan selalu ditampilkan, dan log lengkapnya juga bisa dilihat sepenuhnya