Kabar teknis terkait GitUI
(github.com/extrawurst)- 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,
gituimencatat 24 detik dan penggunaan memori 0.17GB, sedangkanlazygitmencatat 57 detik·2.6GB, dantig4 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.helperuntuk 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, dangituidibandingkan dengan mem-parsing seluruh repositori Git Linux- Repositori target mencakup lebih dari 900 ribu commit
- Materi presentasi terhubung ke RustBerlin meetup presentation dan slides
- Hasil perbandingannya sebagai berikut
gitui: 24 detik, memori 0.17GB, biner 10MB, tidak ada freeze, tidak ada crashlazygit: 57 detik, memori 2.6GB, biner 25MB, ada freeze, crash kadang terjaditig: 4 menit 20 detik, memori 1.3GB, biner 0.6MB, freeze kadang terjadi, tidak ada crash
gituimencatat 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
- Keterbatasan saat ini mencakup hal berikut
- 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
- Arch Linux:
- 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/cargoyang 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
- versi minimum
- Dengan Cargo, build dan instalasi dapat dimulai dengan perintah
cargo install gitui --locked - Cargo feature
trace-libgitmengaktifkan tracinglibgit2, dan berfungsi jikalibgit2dibangun 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
- macOS:
- 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 bindingvim - 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
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
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
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
gituimencatat 24 detik, memori 0,17GB, biner 1,4MB, tanpa hang, tanpa crash, sedangkanlazygit57 detik, 2,6GB, 16MB, ada hang, kadang crash, dantig4 menit 20 detik, 1,3GB, 0,6MB, kadang hang, tanpa crashSetahu saya tidak ada fitur yang tidak dimiliki lazygit, malah ada beberapa fitur lazygit yang justru tidak ada di sini
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, sehinggagit statuslambat baik di command line maupun magitDalam 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?
Bahkan saat masalah yang sama terjadi,
git statusdi command line selesai hampir seketikaKalau 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
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
Mendukung drag and drop untuk berbagai operasi seperti merge, rebase, stage/unstage, dan mungkin masih ada lagi
Ini klien Git yang cukup sederhana, tetapi ada sedikit fitur drag untuk hal seperti cherry-pick commit
https://marketplace.visualstudio.com/items?itemName=trunkflo...
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
Sampai sekarang belum ada Git UI yang membuat sistem berbasis menu konteks terasa senatural TortoiseGit
Git UI lain yang mendekatinya hanya Tortoise, tetapi dulu saya cuma pernah memakai varian hg-nya
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
Semua perintah yang dijalankan selalu ditampilkan, dan log lengkapnya juga bisa dilihat sepenuhnya