Maiao: 깃허브·깃랩 등에서 쓰는 게릿 스타일 코드 리뷰 도구
Maiao는 GitHub, GitLab, Gitea 등 다양한 git 호스팅 서비스에서 Gerrit 방식의 코드 리뷰 워크플로우를 구현하는 오픈소스 도구입니다. 커밋마다 자동으로 PR/MR을 생성하고 스택형 구조로 연결해, 큰 기능을 작고 리뷰하기 쉬운 단위로 나눠 개발할 수 있게 해줍니다. 원본 저장소가 더 이상 유지보수되지 않아 커뮤니티 포크로 개발이 이어지고 있습니다.
Maiao 참고: 이것은 adevinta/maiao의 커뮤니티 포크입니다. 원래 유지보수자들이 Adevinta를 떠났고 상위 저장소는 더 이상 활발히 관리되지 않아, 이 포크는 runetes/maiao에서 개발을 이어갑니다.
GitHub, GitLab, Gitea, Forgejo, Bitbucket Cloud, Cursor Origin에서 Gerrit 스타일의 코드 리뷰 워크플로우를 제공합니다.
개요 Maiao는 스택형 풀 리퀘스트(또는 머지 리퀘스트)의 강력함을 여러분의 git 호스팅 서비스에 가져다줍니다. 이를 통해 큰 기능을 작고 리뷰 가능한 커밋으로 나눌 수 있으며, 각 커밋이 자체적인 PR/MR이 됩니다.
Maiao란? Maiao는 다음을 수행하는 git review 명령어를 제공합니다:
브랜치의 각 커밋마다 PR/MR 생성 적절한 부모-자식 종속성으로 PR/MR 자동 스태킹 지원되는 경우 네이티브 스택 등록(GitHub Stacks, GitLab 자동 감지 스택) git commit --fixup을 활용한 우아한 픽스업 처리 Change-IDs를 통한 커밋 추적(Gerrit commit-msg 훅 사용) PR/MR이 병합되면 스택 자동 리베이스 원격 URL에서 제공자 자동 감지 지원 제공자 제공자 PR/MR 유형 WIP/Draft 네이티브 스택 GitHub 풀 리퀘스트 API 필드 예 (명시적 등록) GitLab 머지 리퀘스트 Draft: 제목 접두어 예 (대상 브랜치에서 자동 감지, 최대 20개 MR) Gitea 풀 리퀘스트 WIP: 제목 접두어 아니오 Forgejo/Codeberg 풀 리퀘스트 WIP: 제목 접두어 아니오 Bitbucket Cloud 풀 리퀘스트 지원 안 함 아니오 Cursor Origin (베타) 풀 리퀘스트 API 필드 예 (parentPullNumber)
Maiao는 알려진 호스트(github.com, gitlab.com, codeberg.org, bitbucket.org, origin.cursor.com)의 경우 원격 URL에서 제공자를 자동으로 감지합니다. 셀프 호스팅 인스턴스의 경우 처음 사용 시 선택을 요청하고 git config maiao.provider에 저장합니다.
빠른 예제
여러 커밋 만들기
git commit -m "사용자 인증 추가" git commit -m "인가 미들웨어 추가" git commit -m "관리자 엔드포인트 추가"
모든 커밋에 대해 스택형 PR/MR 생성
git review
결과: 세 개의 PR/MR이 생성되고 스택으로 연결됨:
PR #1: 사용자 인증 추가 → main
PR #2: 인가 미들웨어 추가 → PR #1
PR #3: 관리자 엔드포인트 추가 → PR #2
핵심 장점
세분화된 리뷰: 각 커밋을 독립적으로 리뷰해 더 빠르고 집중된 피드백 가능
명확한 히스토리: PR/MR당 하나의 논리적 변경으로 깔끔한 git 히스토리 유지
쉬운 픽스업: git commit --fixup
git config로 제어 (기본값: auto)
git config maiao.useNativeStack auto # 가능하면 사용, 아니면 건너뜀 git config maiao.useNativeStack true # 항상 등록, 불가하면 경고 git config maiao.useNativeStack false # 완전히 비활성화 문서 시작하기 - 설치 및 워크플로우 가이드 작동 방식 - 기술 세부사항 및 아키텍처 가격 - 무료 오픈소스 스택형 디프 알아보기 Maiao는 스택형 디프(stacked diffs) 방법론을 구현합니다. 자세한 내용:
Stacked Diffs Versus Pull Requests - Jackson Gabbard의 철학에 관한 기초 글 Graphite의 Stacked Diffs 가이드 - 워크플로우와 모범 사례에 대한 포괄적 가이드 The Pragmatic Engineer: Stacked Diffs - 업계 분석 및 채택 패턴 (유료) 왜 "Maiao"인가? Maiao가 사용자에게 풀 리퀘스트에서 더 작고 좋은 커밋을 만들도록 장려하기 때문에, 작은 섬의 이름을 따서 지어졌습니다.
기여 기여를 환영합니다! 자세한 내용은 CONTRIBUTING.md를 참고하세요.
라이선스 MIT 라이선스 - DISCLAIMER 참고.