Tin tức kỹ thuật liên quan đến GitUI
(github.com/extrawurst)- GitUI là công cụ mang lại tính tiện dụng và sự thuận tiện của Git GUI ngay trong terminal, bắt nguồn từ các trường hợp người dùng gặp vấn đề khi Git GUI hiện có bị treo hoặc chậm đi trong những repository khổng lồ
- Các chức năng chính bao gồm thao tác chỉ bằng bàn phím, trợ giúp theo ngữ cảnh, kiểm tra thay đổi·commit·amend, stage/unstage/revert/reset theo đơn vị file·hunk·line, stash, push/fetch, quản lý branch, tìm kiếm log commit và xem diff
- Trong phép so sánh parse hơn 900.000 commit của repository Git Linux,
gituighi nhận 24 giây, bộ nhớ 0,17GB, trong khilazygitghi nhận 57 giây·2,6GB vàtigghi nhận 4 phút 20 giây·1,3GB - Các mục tiêu trước bản 1.0 gồm trực quan hóa cấu trúc branch trong tab log và interactive rebase; có các giới hạn đã biết với git-lfs, sparse repo và xử lý tự động
credential.helpercho HTTPS - Hiện tại, công cụ này chưa thay thế hoàn toàn Git shell, mà gần với một công cụ dùng kèm để bổ trợ các tác vụ bất tiện trong Git shell như stash hoặc staging theo line·hunk
Công cụ đưa trải nghiệm Git GUI vào terminal
- GitUI là công cụ mã nguồn mở cung cấp trải nghiệm người dùng và sự tiện lợi của Git GUI trong terminal
- Động lực phát triển xuất phát từ trải nghiệm dù thực hiện phần lớn tác vụ Git trong terminal, người dùng vẫn thường xuyên dùng Git GUI cho các tác vụ như index, commit, diff, stash, blame, log
- Các Git GUI phổ biến hiện có gặp vấn đề thất bại, mất phản hồi hoặc không thể sử dụng được với những repository khổng lồ
- GitUI đặt mục tiêu mang lại trải nghiệm Git GUI portable, fast, free, opensource ngay trong terminal
Phạm vi tính năng
- Mô hình thao tác xoay quanh điều khiển chỉ bằng bàn phím và trợ giúp theo ngữ cảnh, được thiết kế để không cần ghi nhớ nhiều phím tắt
- Các tác vụ với thay đổi bao gồm:
- inspect, commit, amend thay đổi
- Bao gồm các hook
pre-commit,commit-msg,post-commit,prepare-commit-msg - stage, unstage, revert, reset theo đơn vị file, hunk, line
- Cũng hỗ trợ các tác vụ luồng repository:
- lưu stash, pop, apply, drop, inspect
- push lên remote, fetch từ remote
- tạo, đổi tên, xóa, checkout branch, xem remotes
- duyệt log commit và tìm kiếm, xem diff của các thay đổi đã commit
- UI và hoạt động bên trong bao gồm UI terminal phản hồi nhanh, Git API bất đồng bộ để thao tác mượt mà, và hỗ trợ submodule
- Hỗ trợ GPG commit signing nhưng có hạn chế liên quan đến #97
Kết quả benchmark
- Trong bài trình bày tại RustBerlin meetup,
lazygit,tig,gituiđược so sánh bằng cách parse toàn bộ repository Git Linux- Repository mục tiêu chứa hơn 900.000 commit
- Tài liệu trình bày được liên kết tại RustBerlin meetup presentation và slides
- Kết quả so sánh như sau:
gitui: 24 giây, bộ nhớ 0,17GB, binary 10MB, không freeze, không crashlazygit: 57 giây, bộ nhớ 2,6GB, binary 25MB, có freeze, thỉnh thoảng crashtig: 4 phút 20 giây, bộ nhớ 1,3GB, binary 0,6MB, thỉnh thoảng freeze, không crash
- Trong phép so sánh này,
gituighi nhận giá trị thấp nhất ở các hạng mục thời gian và bộ nhớ
Roadmap trước 1.0 và các giới hạn đã biết
- Có hai mục tiêu cấp cao trước khi gọi là bản 1.0:
- Các giới hạn hiện tại bao gồm:
- GitUI hiện không thay thế hoàn toàn Git shell; cách phù hợp là dùng hai công cụ song song
- Mức ưu tiên tập trung vào các chức năng bất tiện trong Git shell, như stash và staging theo đơn vị line·hunk
- Dự án hiện là spare time project, và cần sự trợ giúp để biến GitUI thành one stop solution
Cài đặt và build
- GitUI đang ở trạng thái beta, nên có thể có lỗi và tính năng còn thiếu
- Công cụ đủ ổn định một cách hợp lý cho sử dụng cá nhân và cũng đang được dùng để phát triển chính GitUI
- Có thể cài đặt bằng nhiều 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:
- Binary phát hành được cung cấp cho Linux, macOS, Windows
- Linux có các gói x86_64, aarch64, arm, armv7
- macOS có các gói arm64 và Intel x86
- Windows có binary đơn 64bit và gói cài đặt MSI 64bit
- Yêu cầu build như sau:
- Phiên bản
rust/cargođược hỗ trợ tối thiểu là 1.88 - Cần perl 5.12 trở lên và trình biên dịch C để build dependency OpenSSL
- Cần Python có thể gọi bằng
pythonđể chạy toàn bộ test suite
- Phiên bản
- Với Cargo, có thể bắt đầu build và cài đặt bằng lệnh
cargo install gitui --locked - Cargo feature
trace-libgitkích hoạt tracing cholibgit2, và hoạt động khilibgit2được build với-DENABLE_TRACE=ON - Feature này được bật mặc định; để tắt, hãy dùng
cargo install --no-default-features
Cấu hình, chẩn đoán, tùy biến
- Logging được kích hoạt bằng
gitui -l - Vị trí file log khác nhau tùy nền tảng:
- 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 sẽ tự động hoạt động với cả theme terminal sáng và tối
- Có thể tùy biến theme màu theo
THEMES.md - Có thể tùy biến key binding theo
KEY_CONFIG.md, và có thể thiết lập binding kiểuvim - Các dự án truyền cảm hứng là lazygit, tig, GitUp, git-brunch
- Về GitUp, có thêm mục tiêu là sẽ tốt nếu tìm được cách dùng map view trong công cụ terminal
1 bình luận
Ý kiến trên Hacker News
Ngay sau khi cài đặt, cửa sổ xterm quá nhỏ nên tôi phóng to lên, rồi định kéo mép vùng cây tệp để thu hẹp lại nhưng không thể
Tôi muốn xem
difflớn hơn, còn tên tệp thì ngắn nên phần lớn vùng cây bị lãng phí, mà trong trợ giúpHcũng không có phím nào liên quan, nên có vẻ như cũng không thể chỉnh kích thước bằng bàn phímDù có thể làm bằng bàn phím đi nữa thì trong trường hợp này đổi kích thước bằng chuột vẫn dễ và nhanh hơn nhiều, và cũng sẽ tốt nếu có chỉnh bằng bàn phím cho những lúc không dùng được chuột, như trong môi trường SSH bị lỗi
Ngay cả trong Vim, những chỗ tôi vẫn dùng trackpad/chuột là cuộn và chỉnh kích thước cửa sổ, và không có lý do gì mà qua SSH lại không thể hỗ trợ cả hai
Nó có vẻ cũng sẽ là một tính năng bổ sung hay ở đây
lazygitđược ghi là nguồn cảm hứng của dự án này, nên với tư cách là người dùng lazygit, tôi tò mò không biết nó còn thiếu gì mà cần hẳn một dự án mới hoàn toànTôi đang dùng lazygit rất hữu ích
Để trình bày ở meetup RustBerlin, họ đã parse toàn bộ kho Git của Linux để so sánh lazygit, tig và gitui, và kho đó có hơn 900 nghìn commit
gituimất 24 giây, dùng 0.17GB bộ nhớ, binary 1.4MB, không treo, không crash;lazygitmất 57 giây, 2.6GB, 16MB, có treo, thỉnh thoảng crash; còntiglà 4 phút 20 giây, 1.3GB, 0.6MB, thỉnh thoảng treo, không crashTheo tôi nhớ thì nó không có tính năng nào mà lazygit không có, thậm chí còn thiếu một số tính năng đang có trong lazygit
Họ làm hầu hết tác vụ Git trong terminal, nhưng với các việc như index, commit, diff, stash, blame, log thì lại thường dùng Git GUI, và các Git GUI phổ biến hoặc là thất bại hoặc mất phản hồi trên những kho rất lớn nên không dùng được
Câu “các Git GUI phổ biến hoặc là thất bại hoặc mất phản hồi trên những kho rất lớn nên không dùng được” là điều tôi chỉ thấy khi
git statusbị chậm trên dòng lệnh hoặc trong magit do một cây thư mục rất sâu chưa đưa vào.gitignoreTrong trường hợp như vậy, tôi không thấy có khác biệt giữa việc dùng Git kiểu GUI/TUI/dòng lệnh
Các giao diện Git khác có thất bại nghiêm trọng hơn chính Git không?
Ngay cả khi gặp cùng vấn đề đó thì
git statustrên dòng lệnh vẫn gần như kết thúc ngay lập tứcViệc hiển thị nhiều thông tin thì tất nhiên sẽ tốn thời gian, nhưng magit ở một số điểm hoạt động quá eager nên đôi khi tạo ra luồng công việc đắt hơn rất nhiều so với luồng Git thuần
Git UI của IntelliJ được viết bằng Java và còn chạy bên trong IDE mà vẫn đủ nhanh, nên một Git UI độc lập đáng ra không nên là vấn đề
Bài liên quan:
GitUI: Terminal UI for Git - https://news.ycombinator.com/item?id=32864036 - tháng 9 năm 2022, 90 bình luận
Terminal-UI for Git written in Rust - https://news.ycombinator.com/item?id=25504811 - tháng 12 năm 2020, 1 bình luận
Có ai từng làm một giao diện click-and-drag cho Git chưa?
Ý là một giao diện cho phép làm việc kiểu cứ kéo thả nhánh là xong
Nó hỗ trợ drag-and-drop cho nhiều thao tác như merge, rebase, stage/unstage, và có lẽ còn nhiều nữa
Nó là một Git client khá đơn giản, nhưng cũng có một chút tính năng kéo thả cho các việc như cherry-pick commit
https://marketplace.visualstudio.com/items?itemName=trunkflo...
Tôi đã thử gần như mọi công cụ kiểu này, nhưng cuối cùng luôn quay lại tig vì lúc nào cũng thiếu một tính năng cốt lõi nào đó hoặc nó không hoạt động theo cách tôi muốn
Trong GitUI, tôi không tìm thấy cách hiển thị nào thể hiện tốt cấu trúc nhánh ở những nơi như chế độ xem Log
Sẽ rất tốt nếu có một công cụ thể hiện cấu trúc nhánh rõ ràng để phục vụ việc cân nhắc rebase
Trông khá ổn, có lẽ tôi sẽ thử
Tôi vẫn hy vọng một ngày nào đó GitExtensions sẽ được port thành ứng dụng Linux native
Tôi đã dùng hàng chục UI nhưng có vẻ không có cái nào sánh bằng nó
Vẫn chưa có Git UI nào giúp dùng hệ thống dựa trên menu ngữ cảnh một cách tự nhiên như TortoiseGit
Git UI duy nhất khác gần giống nó là Tortoise, nhưng trước đây tôi chỉ dùng biến thể hg của nó
Trên Linux tôi vẫn đang dùng bản mono 2.x của nó
Nó trông rất giống plugin Neovim neogit mà tôi bắt đầu dùng từ khoảng một tháng trước
Key binding hơi gượng gạo, và tôi mất khoảng một giờ để thực sự quen với toàn bộ workflow, nhưng sau khi quen rồi thì nó nhanh hơn nhiều so với cách cũ là suspend neovim rồi dùng Git trực tiếp trong shell
0: https://github.com/NeogitOrg/neogit
Một trong những điều khiến tôi lo ngại về các công cụ UI là chúng thường che giấu các lệnh thực sự khỏi người dùng, khiến sau này khó suy ra chuyện gì đã sai và làm sao tránh lặp lại
Ví dụ, một số công cụ có thể gắn thêm những flag khá áp đặt, không phù hợp với luồng CLI thông thường
Tôi không biết công cụ này có như vậy không, nhưng đây có thể là một phản hồi đáng chú ý cho nhóm công cụ cùng loại này
Nó luôn hiển thị đầy đủ các lệnh đang chạy, và bạn cũng có thể xem toàn bộ log một cách trọn vẹn