Gerrit 연동 Git 워크플로우와 문제 해결 가이드

Gerrit의 역할

Gerrit은 단순한 Git 저장소가 아니라 코드 리뷰를 위한 중간 저장소입니다. 개발자가 만든 커밋은 먼저 Gerrit에 제출되어 리뷰를 거친 뒤, 승인되면 최종 원격 저장소(예: origin)에 반영됩니다.

코드 제출 름

  1. 로컬에서 밋을 작성합니다.
  2. Gerrit에 제출해 리뷰를 요청합니다.
  3. 리뷰를 통과하면 실제 원격 브랜치로 병합됩니다.

리뷰 브랜치 려받기

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>

리뷰 코멘트 처리 절차

리뷰어의 피드을 반영할 때는 다음 단계를 따릅니다.

  1. ACK: 코멘트를 확인합니다.
  2. REPLY: 수정 내용을 반영합니다.
  3. 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 ...

해결 방법:

  1. 로컬 Git 사용자 정보를 Gerrit 계정과 일치시킵니다.
git config --global user.name "gerrit_user"
git config --global user.email "gerrit_user@example.com"
  1. 기존 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

태그: Gerrit git-review code-review Git-Workflow SSH

9월 24일 17:57에 게시됨