TL;DR

  • gitman은 같은 상위 디렉터리에 있는 여러 Git 저장소를 슈퍼 브랜치(super branch)로 묶어 관리하며, 각 슈퍼 브랜치에 등록되지 않은 저장소는 건드리지 않는 도구임.
  • gitman.toml에 저장소와 브랜치 쌍을 정의하고, gitman list, checkout, pull, push 명령으로 각 저장소를 일괄 관리함.
  • pullpush는 기존 체크아웃 브랜치를 기억한 뒤 설정된 브랜치에서 작업하고 원래 브랜치로 돌아오며, 작업 실패 여부와 관계없이 작업 상태를 복원함.
  • build는 직속 하위 디렉터리의 Git 저장소에서 현재 브랜치를 수집해 새 슈퍼 브랜치 블록을 추가하고, 기존 파일 내용과 주석을 보존함.
  • 저장소별 오류를 보고한 뒤 나머지 저장소도 계속 처리하며, 하나라도 실패하면 종료 코드가 0이 아님.

설정

  • 저장소가 있는 상위 디렉터리에 gitman.toml을 두고 [superbranches.<이름>] 아래에 저장소 이름과 브랜치 쌍을 정의함.
  • 예시에서는 feature-login 슈퍼 브랜치에 auth-servicefeature/loginweb-frontendfeature/login-ui를 지정하고, hotfix-42에는 auth-servicehotfix/42를 지정함.
  • 어느 슈퍼 브랜치에도 등록되지 않은 billing 저장소는 작업 대상에서 제외됨.

사용법

  • 상위 디렉터리에서 명령을 실행하거나 -C <dir>로 해당 디렉터리를 지정함.
  • gitman list는 모든 슈퍼 브랜치와 각 슈퍼 브랜치에 등록된 저장소를 표시함.
  • gitman checkout feature-login은 등록된 각 저장소에서 지정된 브랜치를 체크아웃함.
  • gitman pull feature-login은 설정된 브랜치를 체크아웃해 git pull --ff-only를 실행한 뒤 이전 브랜치로 돌아옴.
  • gitman push feature-login은 설정된 브랜치를 체크아웃해 git push를 실행한 뒤 이전 브랜치로 돌아옴.
  • gitman status는 모든 저장소의 현재 브랜치를 표시하고, 변경 사항이 있는 작업 트리를 표시함.
  • gitman status feature-login은 체크아웃된 브랜치와 슈퍼 브랜치 설정을 비교함.
  • gitman build my-feature는 현재 체크아웃된 브랜치들을 새 슈퍼 브랜치로 기록해 gitman.toml에 추가함.
  • gitman --help는 전체 도움말을 표시하며, gitman help <command>로 명령별 도움말도 확인할 수 있음.
  • build는 모든 직속 하위 디렉터리를 살펴 Git 저장소를 찾고 현재 체크아웃된 브랜치를 기록해 [superbranches.<이름>] 블록을 덧붙임. gitman.toml의 기존 내용과 주석은 보존됨.
  • 분리된 HEAD(detached HEAD) 상태의 저장소는 경고와 함께 건너뜀. 생성된 블록은 이후 편집해 기능에 포함되지 않는 저장소를 제거할 수 있음.
  • pullpush는 작업 전 체크아웃된 브랜치를 기억하고 설정된 브랜치에서 작업한 뒤 원래 브랜치로 전환함. pull이나 push가 실패하더라도 작업 상태가 복원됨.
  • 작업 트리 변경, 브랜치 누락, 분기된 pull 등 저장소별 오류를 보고하고 나머지 저장소 처리를 계속함. 오류가 하나라도 있으면 종료 코드가 0이 아님.

빌드

  • cargo build --release로 빌드하며, 바이너리는 target/release/gitman에 생성됨.
  • cargo install --path .로 설치하거나 실행 경로(PATH)에 설치할 수 있음.