# GitUI 기술 관련 소식

> Clean Markdown view of GeekNews topic #12745. Use the original source for factual precision when an external source URL is present.

## Metadata

- GeekNews HTML: [https://news.hada.io/topic?id=12745](https://news.hada.io/topic?id=12745)
- GeekNews Markdown: [https://news.hada.io/topic/12745.md](https://news.hada.io/topic/12745.md)
- Type: GN+
- Author: [neo](https://news.hada.io/@neo)
- Published: 2024-01-08T10:12:50+09:00
- Updated: 2024-01-08T10:12:50+09:00
- Original source: [github.com/extrawurst](https://github.com/extrawurst/gitui)
- Points: 10
- Comments: 1

## Topic Body

### 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 작업을 수행할 수 있도록 도와주는 도구로, 특히 키보드 조작에 익숙한 사용자들에게 매우 유용할 것으로 보임.

## Comments



### Comment 22074

- Author: neo
- Created: 2024-01-08T10:12:51+09:00
- Points: 1

###### [Hacker News 의견](https://news.ycombinator.com/item?id=38905019) 
- > 키보드만으로 빠르고 직관적인 제어
  - 사용자는 좋은 의도로 프로그램을 만들었을 것이나, 설치 후 첫 시도에서 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를 사용함으로써 얻을 수 있는 특정 장점이 무엇인지 배우고 싶어 함.
