프로젝트 소개

# manygit — 다중 저장소 Git CLI 관리자 manygit은 전체 git 저장소 **트리**에 lazygit 스타일 터미널 UI를 제공하는 단일 CLI 도구입니다. 폴더를 지정하면 그 아래 모든 저장소가 한 화면에 나타나며, 브랜치와 앞서/뒤처짐/변경 여부를 표시합니다. 강조된 저장소에서 fetch, pull, push, 브랜치 전환을 수행할 수 있고, 커밋 그래프 보기, 스크립트 실행, GitHub 풀 리퀘스트 탐색(`gh` CLI 설치 시)도 가능합니다. `gita`나 `mani` 같은 배치 실행기와 달리, 저장소를 등록할 설정 파일이나 출력을 다시 읽을 필요가 없습니다. manygit은 폴더를 탐색해 저장소를 자동으로 발견하며, 목록에 머물러 작업합니다. ## 주요 기능 - **자동 발견**: 폴더(기본 깊이 3)를 스캔해 git 저장소를 찾고 상위 디렉터리별로 그룹화합니다. - **통합 상태 보기**: 브랜치, 앞서/뒤처짐 수, 변경 상태, 로컬 전용 저장소를 한눈에 확인합니다. - **직접 작업**: 동기화(fetch + fast-forward pull), push, 브랜치 체크아웃, 변경 사항 폐기(확인 포함), 하나 또는 모든 저장소 fetch. - **커밋 그래프**: 커밋 기록의 전체 화면 시각화. - **스크립트 실행기**: 여러 저장소에 걸쳐 스크립트 정의 및 실행. - **GitHub PR 창**: 열린 PR 및 리뷰 요청 목록(`gh` CLI 필요), PR 브랜치 한 키 체크아웃. - **일반 영어 git**: "rebase current onto master" 같은 요청을 입력하면 AI 하네스가 git 명령으로 변환해 확인을 받습니다. - **저장소 내 셸**: 강조된 저장소에서 지속적 셸 프롬프트를 열어 임의 명령 실행. - **필터링**: 이름, 브랜치, 태그로 저장소 필터링; 변경/앞서/뒤처짐 있는 저장소만 표시. - **테마**: 여러 색상 테마(default, serika_dark, dracula, nord, catppuccin, 8008). - **자체 업데이트**: 변경 로그 표시가 있는 내장 업데이터. ## 설치 **Linux** ```bash curl -fsSL https://raw.githubusercontent.com/rabeeh-ta/manygit/main/install.sh | bash ``` **macOS** ```bash brew tap rabeeh-ta/manygit && brew trust rabeeh-ta/manygit && brew install manygit ``` **Windows (PowerShell)** ```powershell irm https://raw.githubusercontent.com/rabeeh-ta/manygit/main/install.ps1 | iex ``` 기타 방법: `go install github.com/rabeeh-ta/manygit@latest` (Go 1.24+), 또는 소스에서 빌드. 설치 프로그램에 태그를 전달해 특정 버전을 고정할 수 있습니다(예: `bash -s -- v1.0.7`). ## 사용법 ```bash manygit # 현재 디렉터리 스캔 manygit --root ~/work # 특정 폴더 스캔 manygit stats # GitHub 다운로드 통계 출력 ``` ## 키 바인딩 (요약) - `1`-`7`: 창 포커스 (Repos, Scripts, Branches, PRs, Graph, Changes, Output) - `j`/`k`: 포커스된 패널 내 이동 - `enter`: 상황별 (브랜치 보기, 체크아웃, 스크립트 실행, PR 브랜치 체크아웃) - `s`/`p`: 강조된 저장소 동기화(fetch + ff-pull) / push - `d`/`D`: 변경 사항 폐기(추적만 / 추적+비추적) - `f`/`r`: 하나 fetch / 모두 재fetch - `g`: 전체 화면 커밋 그래프 - `n`: 전체 화면 뉴스 피드(AI 요약 헤드라인) - `t`: 최신 태그 표시 전환 - `F`: 변경/앞서/뒤처짐 있는 저장소로 필터링 - `/`: 목록 필터링(저장소는 이름·브랜치, 브랜치는 이름, 스크립트는 이름) - `:`: AI 하네스를 통한 일반 영어 git 명령 - `!`: 강조된 저장소에서 셸 열기 - `o`: 편집기에서 저장소 열기 - `z`: 포커스된 창 확대 - `esc`: 상태 한 단계 뒤로 - `?`: 도움말 오버레이(키 바인딩 및 설정) - `q` 또는 `esc esc`: 종료 ## 설정 선택적 설정 파일 `~/.config/manygit/config.yml`: ```yaml max_depth: 3 # 루트 아래 검색할 폴더 깊이 (1-5) open_cmd: code # `o`에 사용할 편집기 명령 theme: default # default | serika_dark | dracula | nord | catppuccin | 8008 status_glyphs: unicode # 또는 "ascii" ``` ## 안전성 - manygit은 실행 폴더에 절대 쓰지 않습니다. - 단독으로는 절대 force-push, merge, rebase를 하지 않습니다; `s`는 fetch + fast-forward 전용 pull, `p`는 일반 push입니다. - 단독으로 제공하는 유일한 파괴적 작업은 변경 사항 폐기(`d`/`D`)이며, 항상 확인을 요청합니다. - `!` 셸과 `:` AI 명령은 의도적 예외로, 실행 전 명령 표시, 인자 목록으로 git 실행(셸 파이프 없음), 위험한 플래그 거부 같은 안전장치가 있습니다. ## 릴리스 (관리자) 버전 태그를 푸시하면(예: `git tag v0.2.0 && git push origin v0.2.0`) GitHub Actions가 바이너리를 빌드하고 릴리스를 게시합니다; 설치 프로그램과 자체 업데이터가 자동으로 인식합니다. 릴리스 노트가 앱 내 변경 로그가 됩니다. ## 온라인 체험 TUI의 작동 포트가 [랜딩 페이지](https://rabeeh-ta.github.io/manygit/)에서 실행됩니다 — git은 가짜지만 키는 실제입니다.