Gerrit의 역할
Gerrit은 단순한 Git 저장소가 아니라 코드 리뷰를 위한 중간 저장소입니다. 개발자가 만든 커밋은 먼저 Gerrit에 제출되어 리뷰를 거친 뒤, 승인되면 최종 원격 저장소(예: origin)에 반영됩니다.
코드 제출 름
- 로컬에서 밋을 작성합니다.
- Gerrit에 제출해 리뷰를 요청합니다.
- 리뷰를 통과하면 실제 원격 브랜치로 병합됩니다.
리뷰 브랜치 려받기
git review -d <change_number> 명령으로 Gerrit에 등록된 특정 패치를 로컬로 가져올 수 있습니다. 이 명령은 클론과 유사하며, 내받은 브랜치는 이미 gerrit/master 등 원격 추적 브랜치와 연결되어 있어 추가 upstream 설정이 필요 없습니다.
git review -d 1234
원격 브랜치 이해
Gerrit을 사용하면 최소 두 개의 원격이 존재합니다.
origin/master: 최종 승인된 코드가 모이는 곳gerrit/master: 리뷰용 패치가 쌓이는 기본 원격 브랜치
리뷰 저장소의 기본 목적지는 gerrit/master이며, 모든 변경은 최종적으로 origin/master에 합쳐집니다. git pull 실행 시 upstream이 없다면 다음과 같이 설정합니다.
git branch --set-upstream-to=gerrit/master <local_branch>
리뷰 코멘트 처리 절차
리뷰어의 피드을 반영할 때는 다음 단계를 따릅니다.
- ACK: 코멘트를 확인합니다.
- REPLY: 수정 내용을 반영합니다.
- SEND: 답변과 함께 새로운 패치셋을 업로드합니다.
분리된 HEAD(Detached HEAD)
다음 메시지는 HEAD가 브랜치가 아닌 특정 커밋을 가리키고 있음을 의미합니다.
분리된 HEAD 상태입니다. a1b2c3d4
이유는 현재 브랜치를 checkout하지 않고 커밋을 접 체크아웃했기 때문입니다. 해결 방법은 새 브랜치를 생성해 해당 커밋을 잡는 것입니다.
git switch -c feature-from-detached
병합 충 해결
원격 브랜치와 현재 브랜치가 충돌하면 rebase 기반으로 해결합니다.
git pull --rebase
# 충 파일 수정
git add .
git rebase --continue
충돌이 모두 해결되면 원격 밋 ID를 확인한 뒤 필요시 로컬 상태를 정리합니다.
git log --oneline gerrit/master
git reset --hard <stable-commit-id>
git review 중단 후 복구
git review 실행 중 Ctrl+C로 프로세스를 강제 종료하면 작업 디렉터리가 어긋날 수 있습니다. 그때는 다시 해당 변경을 내려아 작업합니다.
git review -d <change_number>
여러 커을 하나로 합치기
하나의 리 변경으로 만들고 싶다면 마지막 N개 밋을 soft 리셋 후 다시 커밋합니다.
git reset --soft HEAD~3
git commit -m "review: add new editor module"
git review rejected 원인과 대처
1. 변경이 폐기된 경우
Gerrit에서 해당 change가 abandoned(폐기)되면 closed 상태가 되어 동일한 Change-Id로 푸시가 거부됩니다. 해결은 커밋을 amend하고 기존 Change-Id를 제거하면, commit-msg 훅이 새로운 Change-Id를 생성합니다.
git commit --amend
# Change-Id: ... 줄 삭제 후 저장
git review
2. 원격과 로컬 충돌
최신 원격 코드와 충돌하면 push가 거부됩니다. 최신 코드를 받아 충돌을 해결한 뒤 다시 시합니다.
git pull --rebase
# 돌 해결
git review
작성자 정보가 Gerrit 계정과 다를 때
다음 오류는 커밋의 이메일이 Gerrit 계정에 등록되지 않았음을 의미합니다.
remote: ERROR: commit 90aab80: email address xxx@qq.com is not registered ...
해결 방법:
- 로컬 Git 사용자 정보를 Gerrit 계정과 일치시킵니다.
git config --global user.name "gerrit_user"
git config --global user.email "gerrit_user@example.com"
- 기존 SSH 키를 제거하고 새로 생성한 뒤 Gerrit에 등록합니다.
rm -f ~/.ssh/id_rsa ~/.ssh/id_rsa.pub
ssh-keygen -t ed25519 -C "gerrit_user@example.com"
# 공개키를 Gerrit Settings → SSH Public Keys에 등록
git review 시 매번 인증 입력 방지
반복 입력을 줄이려면 gitreview 설정에 자격 증명을 저장할 수 있습니다. 보안상 비밀번호를 문으로 저장하는 것은 권장되지 않으므로, 가능하면 SSH 키 인증을 우선 사용하세요.
git config --global gitreview.username gerrit_user
git config --global gitreview.password secret_token