TL;DR
- git2imap이 호스팅된 Git 저장소를 읽기 전용 IMAP 계정으로 제공하며, 브랜치는 메일박스, 커밋은 Git 패치를 본문에 담은 이메일로 표시함
- 공개·인증 HTTP(S)와 SSH 원격 저장소를 베어 미러로 복제하고 기본 브랜치를 INBOX, 나머지 브랜치를 Branches/ 아래에 배치함
- 저장소 추가·새로 고침·검사·자격 증명 교체·삭제를 지원하는 관리자 웹 UI를 제공함
- 대규모 저장소는 메일 클라이언트 동기화에 오랜 시간이 걸리며, 현재 저장소 쓰기 기능은 제공하지 않음
- Go 1.27 이상, Git CLI, OpenSSH 클라이언트, 영구적인 32바이트 암호화 키가 필요함
git2imap
- 이메일 클라이언트에서 Git 저장소의 전체 커밋 기록을 보고 싶었던 사람을 위한 해결책임. 물론 그런 사람은 없었겠지만, 이제 이 오래되고 절실한 문제를 위한 git2imap이 제공됨.
- 호스팅된 Git 저장소를 읽기 전용 IMAP 계정으로 표시함.
- 각 브랜치는 메일박스이며, 각 커밋은 본문에 Git 패치를 담은 이메일임.
- 프리미엄 항공 인터넷 요금제를 지불할 여유가 없는 상태로 비행 중일 때 인턴들이 멍청한 일을 하지 않는지 확인하는 용도로 사용할 수 있음.
- GitHub를 공개적으로 이용하기에 너무 위험하다고 판단한 국민국가의 방화벽을 우회하는 끔찍한 방법으로도 활용 가능함.
- git2imap이 도움이 될지는 알 수 없지만 공개함.
현재 기능
- 공개 HTTP(S), 인증 HTTP(S), SSH 원격 저장소를 위한 베어 미러 복제
- 기본 브랜치를 INBOX로 배치하고 다른 브랜치를 Branches/ 아래에 배치
- 프록시 추가, 새로 고침, 검사, 자격 증명 교체, 삭제를 위한 관리자 웹 UI
- 이제는 (아마도) 중단되지 않는 상태
제한 사항
- 대규모 저장소에서는 메일 클라이언트 동기화에 오랜 시간이 걸릴 수 있음. 예시는 Linux.git임.
- 저장소 쓰기 기능은 아직 없음. 이메일을 커밋으로 변환하는 계층을 작업 중임.
요구 사항
- 빌드에 필요한 Go 1.27 이상
- Git CLI
- SSH 원격 저장소에 필요한 OpenSSH 클라이언트
- 영구적으로 유지되는 32바이트 암호화 키
로컬 실행
config.example.yaml을 바탕으로 설정을 만들고, 필요한 두 개의 시크릿을 입력함.cp config.example.yaml config.yaml명령으로 예시 설정을 복사함.GIT2IMAP_MASTER_KEY = "<base64-32-byte-key>"에 32바이트 키를 입력함.GIT2IMAP_ADMIN_PASSWORD = "<strong-password>"에 강력한 비밀번호를 입력함.go run ./cmd/git2imap serve -config config.yaml명령으로 서비스를 실행함.http://127.0.0.1:8080을 열고 관리자로 로그인한 뒤 저장소를 추가함.
메일 클라이언트 설정
- 이메일:
git2imap+<project>@<public_host> - 사용자 이름:
git2imap+<project>@<public_host> - 비밀번호: 생성된 저장소 비밀번호
- IMAP: 설정된 IMAP 또는 IMAPS 리스너
- SMTP: 설정된 SMTP 또는 SMTPS 리스너
도커
- 포함된 Compose 파일을 로컬 개발 환경에 사용할 수 있음.
GIT2IMAP_MASTER_KEY = "<base64-32-byte-key>"에 32바이트 키를 입력함.GIT2IMAP_ADMIN_PASSWORD = "<strong-password>"에 강력한 비밀번호를 입력함.docker compose up --build명령으로 빌드하고 실행함.- 운영 환경에서는 개발용 리스너 설정을 TLS 인증서 경로로 교체하고, 필요한 표준 포트를 공개하며, 인증서를 읽기 전용으로 마운트하고,
public_host를 설정해야 함. - 두
allow_insecure_auth값을 모두false로 설정해야 함. - 운영 환경에서 사용할 이유는 도대체 무엇인지 알 수 없음.
보안 참고 사항
- 마스터 키를 안정적으로 유지하고 백업해야 함. 키를 잃으면 저장된 Git 및 메일 자격 증명을 복구할 수 없음.
- SSH 호스트 키는 최초 사용 시 신뢰하는 방식(trust on first use)으로 처리되며
known_hosts에 저장됨. - 저장소 URL에는 로컬 경로,
file://, 외부 명령 전송 방식을 사용할 수 없음.
댓글 (0)
로그인하면 이 기사에 내 생각을 남길 수 있어요