GN⁺: GitUI 기술 관련 소식
(github.com/extrawurst)GitUI는 터미널에서 GUI의 편안함을 제공함
- 키보드만으로 빠르고 직관적인 조작 가능
- 핫키를 외울 필요 없는 상황에 맞는 도움말 제공
- 변경 사항 검토, 커밋, 수정 커밋(훅 포함: pre-commit, commit-msg, post-commit, prepare-commit-msg)
- 파일, 헝크, 라인의 스테이징, 언스테이징, 되돌리기 및 리셋
- 스태싱(저장, 적용, 삭제, 검사)
- 원격지로부터의 푸시/페치
- 브랜치 목록(생성, 이름 변경, 삭제, 체크아웃, 원격지)
- 커밋 로그 탐색/검색, 커밋된 변경 사항의 차이(diff) 확인
- 반응형 터미널 UI
- 유동적인 조작을 위한 비동기 git API
- 서브모듈 지원
동기
- 터미널에서 대부분의 git 작업을 하지만, 인덱스, 커밋, 차이(diff), 스태시, 블레임, 로그와 같은 몇몇 사용 사례에서 git GUI를 자주 사용함.
- 대형 리포지토리에서 인기 있는 git GUI들은 종종 반응하지 않거나 사용할 수 없게 됨.
- GitUI는 터미널 내에서 git GUI의 사용자 경험과 편안함을 제공하면서 이식성이 높고 빠르며 무료이고 오픈소스임.
벤치마크
- RustBerlin 미트업 발표에서
lazygit
,tig
,gitui
를 비교하여 리눅스 git 리포지토리(90만 개 이상의 커밋 포함) 전체를 파싱함:-
gitui
: 24초 ✅, 0.17GB 메모리 ✅, 1.4MB 바이너리, 동결 없음 ✅, 충돌 없음 ✅ -
lazygit
: 57초, 2.6GB 메모리, 16MB 바이너리, 동결 있음, 가끔 충돌 -
tig
: 4분 20초, 1.3GB 메모리, 0.6MB 바이너리 ✅, 가끔 동결, 충돌 없음 ✅
-
1.0으로 가는 로드맵
-
1.0
을 선언하기 전의 고수준 목표:- 로그 탭에서 브랜치 구조 시각화(#81)
- 인터랙티브 리베이스(#32)
알려진 제한 사항
- 희소 리포지토리(sparse repo) 지원 없음(#1226)
- GPG 서명 지원 없음(#97)
- git-lfs 지원 없음(#1089)
- https 필요한 credential.helper 는 명시적으로 설정해야 함(#800)
- 현재 이 도구는 git shell 을 완전히 대체하지는 않지만, 두 도구는 잘 협력함.
-
gitui
의 우선순위는 git shell 에서 진행할 때 불편한 기능들, 예를 들어 스태싱, 라인이나 헝크 스테이징 등에 있음. - 결국
gitui
를 원스톱 솔루션으로 만들 수 있을 것이나, 이를 위해서는 도움이 필요함 - 현재는 여가 시간 프로젝트임. - 모든 지원과 후원이 환영됨! ❤️
설치
- GitUI는 베타 버전이며 버그와 누락된 기능이 있을 수 있음. 그러나 개인적인 사용에는 상당히 안정적이며 개발 중에도 사용 중임.
- 다양한 패키지 관리자를 통해 설치 가능함.
빌드
- 최소 지원
rust
/cargo
버전:1.65
- openssl 종속성 빌드를 위한 요구 사항(https://docs.rs/openssl/latest/openssl/ 참조)
- 완전한 테스트 스위트를 실행하기 위해서는 python이 필요함(
python
으로 호출 가능해야 함) -
cargo install gitui
를 통해gitui
를 빌드하고 설치하는 것이 가장 간단함.
자주 묻는 질문(FAQs)
- FAQs 페이지 참조
진단
- 로깅 활성화 상태에서
gitui -l
로 실행하면 로그가 기록됨.
색상 테마
-
gitui
는 밝은 테마와 어두운 테마의 터미널 모두에서 자동으로 작동함. - 모든 것을 취향에 맞게 사용자 정의할 수 있음.
키 바인딩
- 키 바인딩은 사용자 정의가 가능함.
후원
영감
-
lazygit
,tig
,GitUp
등에서 영감을 받음. - 터미널 도구에서 맵 뷰를 사용할 수 있는 방법을 고안하는 것이 좋을 것임.
GN⁺의 의견
- GitUI는 터미널을 선호하는 사용자들에게 GUI의 편리함을 제공하면서도 빠른 속도와 낮은 메모리 사용량을 자랑함. 이는 특히 대형 리포지토리를 다룰 때 매우 중요함.
- 오픈소스 프로젝트로서, 개발자 커뮤니티의 지원과 기여를 통해 지속적으로 발전하고 있으며, 사용자의 피드백을 반영하여 기능을 개선해 나가고 있음.
- GitUI는 개발자들이 터미널 환경에서도 효율적으로 git 작업을 수행할 수 있도록 도와주는 도구로, 특히 키보드 조작에 익숙한 사용자들에게 매우 유용할 것으로 보임.
Hacker News 의견
-
키보드만으로 빠르고 직관적인 제어
- 사용자는 좋은 의도로 프로그램을 만들었을 것이나, 설치 후 첫 시도에서 xterm 창 크기 조절이나 파일 트리 창의 크기 조절이 불가능했음. 키보드로도 해당 기능을 찾을 수 없었으며, 마우스로 크기 조절이 가능하다면 훨씬 쉽고 빠를 것임.
-
lazygit에서 영감을 받은 프로젝트
- lazygit 사용자로서, lazygit에서 부족한 점이 무엇인지 궁금함. lazygit은 매우 유용하게 사용되고 있음.
-
대형 리포지토리에서 인기 있는 git GUI의 실패
- 대형 리포지토리나 깊은 디렉토리 구조에서 git 상태 확인이 오래 걸리는 문제는 경험함. GUI, TUI, 커맨드라인 간의 차이가 실제로 있는지 의문임.
-
새로운 프로젝트에 대한 기대
- GitExtensions가 리눅스 네이티브 애플리케이션으로 포팅되기를 바람. 다양한 UI를 시도했지만 GitExtensions만큼 좋은 것을 찾지 못함.
-
클릭-앤-드래그 UI에 대한 질문
- git에서 브랜치 작업을 드래그 앤 드롭으로 할 수 있는 UI가 있는지 궁금함.
-
Neogit 플러그인 사용 경험
- 약 한 달 전부터 사용하기 시작한 Neogit 플러그인과 유사함. 처음에는 키 바인딩이 어려웠지만, 익숙해지면 이전 워크플로우보다 훨씬 빠름.
-
개인적인 도구 사용 경험
- 다양한 도구를 시도했지만, 항상 어떤 중요한 기능이 빠져 있거나 원하는 대로 작동하지 않아 결국 tig으로 돌아감. GitUI에서는 브랜치 구조를 잘 보여주는 기능이 부족함.
-
일상적으로 사용하는 도구
- 매일 사용하는 도구로서 매우 간단하고 훌륭함. 커밋에 서명하려면 Git 자체를 사용해야 함을 유의.
-
관련 링크
- GitUI: Terminal UI for Git, Terminal-UI for Git written in Rust 관련 해커뉴스 댓글 모음 링크 제공.
-
GUI 사용의 특정 장점에 대한 질문
- GUI를 사용해본 적 없는 사용자가 GUI를 사용함으로써 얻을 수 있는 특정 장점이 무엇인지 배우고 싶어 함.