본문으로 건너뛰기
로그인 둘러보기
개발·코딩·데이터베이스 · 윈도우즈 유틸

git-rain

0

git-rain은 여러 로컬 Git 저장소를 한 번에 발견하여 원격 저장소에서 동기화하는 명령줄 도구입니다.

동기화멀티레포

소개

git-rain은 여러 로컬 Git 저장소를 한 번에 발견하여 원격 저장소에서 동기화하는 명령줄 도구입니다. MIT 라이선스 하에 배포되는 Go 기반 오픈소스 프로젝트로, 기본 실행 시 각 저장소에서 `git fetch --all`을 수행해 원격 추적 참조를 갱신합니다. macOS, Linux, Windows 등 다양한 플랫폼에서 설치할 수 있으며, 다수의 저장소를 다루는 워크플로에서 반복 작업을 줄여줍니다.

상세정보

저장소 자동 발견과 일괄 페치

설정된 스캔 경로와 레지스트리에 등록된 경로를 따라 Git 저장소를 자동으로 수집한 뒤, 각 저장소에서 `git fetch –all`을 수행합니다. 기본 동작은 원격 추적 참조(`refs/remotes/`)만 갱신하며 로컬 브랜치를 옮기지는 않습니다. 디렉토리 스캔은 병렬 워커로 실행되고 페치 단계도 병렬로 처리되어 저장소 수가 많을 때도 빠르게 동작합니다.

메인라인 전용 경량 페치

`–fetch-mainline` 옵션을 사용하면 기본 브랜치 등 메인라인으로 지정한 원격 추적 참조만 대상으로 페치합니다. 전체 `git fetch –all`보다 가볍게 동작하므로 빠르게 원격의 핵심 흐름만 확인하고 싶을 때 유용합니다. 메인라인 패턴은 설정의 `mainline_patterns`로 확장할 수 있습니다.

로컬 브랜치 동기화와 안전 모드

`–sync`는 페치 후 로컬 브랜치를 업스트림에 맞춰 하이드레이션합니다. 기본 안전 모드에서는 fast-forward 가능한 경우에만 갱신하고, 로컬에만 존재하는 커밋이 있거나 작업 트리가 더러운 경우 자동으로 건너뜁니다. `–risky` 옵션 또는 설정의 `risky_mode`를 켜면 `git-rain-backup—` 형태의 백업 참조를 만든 뒤 업스트림으로 하드리셋하는 파괴적 정렬을 허용합니다.

드라이런과 인터랙티브 TUI

`–dry-run`은 실제 페치나 브랜치 갱신을 수행하지 않고 어떤 저장소가 페치만 되고 어떤 저장소가 브랜치 하이드레이션 대상이 되는지 미리 보여 줍니다. `–rain`을 지정하면 저장소를 선택하는 인터랙티브 TUI가 열리며, 스캔이 진행되는 동안에도 발견된 저장소를 바로 선택할 수 있습니다. `space`로 개별 토글, `a`로 전체 선택/해제, `enter`로 확정, `q`/`Ctrl+c`로 취소할 수 있습니다.

레지스트리와 영구 무시 처리

한 번 발견된 저장소는 `~/.config/git-rain/repos.toml`에 기록되어 다음 실행 때도 활용됩니다. 여기에는 경로, 이름, 상태, 마지막 발견 시각이 저장되며, `active`, `missing`, `ignored` 상태로 구분됩니다. 레지스트리에는 교차 프로세스 잠금이 적용되어 동시 실행 시에도 손상되지 않으며, 이전 실행이 비정상 종료된 경우 잔류 잠금을 감지해 안전하게 정리할 수 있습니다.

설정 파일과 환경 변수 오버라이드

`git-rain –init`을 실행하면 예시 설정 `~/.config/git-rain/config.toml`이 생성됩니다. 스캔 경로, 스캔 깊이, 워커 수, `risky_mode`, `branch_mode`, `fetch_prune`, `sync_tags`, `mainline_patterns`, `default_mode` 같은 항목을 한곳에서 관리할 수 있습니다. 모든 옵션은 `GIT_RAIN_` 접두사가 붙은 환경 변수로도 덮어쓸 수 있어 일회성 자동화에便利です.

Q. git-rain의 기본 동작은 무엇인가요?

기본 실행은 스캔한 각 저장소에서 `git fetch –all`을 수행해 원격 추적 참조만 갱신합니다. 로컬 브랜치를 옮기지 않으므로 비교적 가볍게 동작합니다.

Q. 로컬 브랜치까지 원격과 맞추려면 어떻게 하나요?

`git-rain –sync`를 사용하면 페치 후 로컬 브랜치를 업스트림에 맞춰 하이드레이션합니다. 로컬 전용 커밋이 있어 강제 정렬이 필요할 때만 `–risky`를 함께 지정해 백업 참조를 만든 뒤 하드리셋을 허용합니다.

Q. Windows에서는 어떻게 설치하나요?

WinGet을 통해 `winget install git-rain.git-rain` 명령으로 설치할 수 있습니다. 또는 GitHub 릴리스 페이지에서 Windows용 `.zip` 자산을 내려받아 수동으로 설치할 수도 있습니다.

Q. 어떤 운영체제에서 동작하나요?

macOS, Linux(Homebrew/Linuxbrew 환경 포함), Windows에서 동작하며, Linux용으로는 `.deb` 또는 `.rpm` 패키지도 제공됩니다.

시스템 요구사항

운영체제로는 macOS, Linux(Homebrew/Linuxbrew 포함), Windows를 지원합니다. Go로 작성되어 소스에서 빌드하거나 `go install`로 설치할 경우 Go 1.24.2 이상이 필요합니다. Git 자격증명은 시스템의 `git` 바이너리에서 사용하는 SSH 에이전트 또는 자격증명 도우미를 그대로 이용하므로 별도의 자격증명 설정은 필요하지 않습니다. 기본 동작은 원격 추적 참조만 갱신하므로 로컬 브랜치를 실제로 옮기려면 `--sync`나 `--risky` 같은 옵션이 명시적으로 켜져 있어야 합니다.