본문 바로가기
Gerrit/Gerrit 일반

3. Gerrit Workflow

by 실짱 2023. 10. 17.

지금까지 서버에서 Gerrit 을 설치하고 설정하는 방법에 대해 알아보았다.

이제 서버의 Gerrit project 를 로컬에서 clone 해서 작업하고 코드리뷰 받는 방법에 대해 알아 보도록 하자.

 

1. Gerrit repository 에서 clone

앞서 잠깐 언급했듯이 clone with commit-msg hook 으로 작업 시작

git clone …. 명령어를 복사
 

2. Local working directory 에서 clone 실행

 

3. 필요한 작업을 하고 commit

여기까지는 내 로컬 PC 에서의 작업이다.

즉, 내 로컬 PC의 git 저장소에 내 수정사항을 반영한 상황이다.

이제 이 로컬에 반영된 사항을 gerrit 서버로 등록해야 한다.

 

4. 서버에 push

원격 저장소에 수정사항을 반영하는것은 push 명령을 통해 이루어 진다.

일반적인 git 원격저장소로의 반영은 git push origin 을 통해서 이루어진다. (물론 origin 에 대한 사전 작업은 되어있다는 가정)

그러나 gerrit 은 gerrit 의 원격 저장소에 수정사항이 저장되기 전에 팀원들로부터 코드 리뷰를 받아야 한다.

따라서 바로 원격 저장소로 push 하는게 아니라 리뷰를 위한 전용 공간으로 push 를 해서 리뷰를 받은 후에 원격 저장소로 merge 되게 된다.

리뷰를 위한 전용 공간에 대한 참조가 바로 refs/for 라는 특별한 참조다.

① 개발자1 이 로컬에서 작업을 마친후 git push 명령을 통해 코드 리뷰를 등록한다.

② 이 push 는 실제로는 git 저장소의 refs/for 라는 참조로 저장이 된다.

③ 이 refs/for 참조가 업데이트 되면 review.aribio.net 에 리뷰가 등록된다.

④ 코드 리뷰를 거친 후 최종적으로 실제 저장소 refs 에 저장된다.

즉, 개발자는 refs/for 에 업데이트를 하게되고, 최종적으로는 gerrit 이 저장소 메인 refs 에 merge 하게 되는 구조인 것이다.

git 은 커밋, branch, tags 등에 대해 모두 참조(refs) 로 관리한다.
ex>
  • 브랜치: refs/heads/main
  • 태그: refs/tags/v1.0.0
  • 리모트 브랜치: refs/remotes/origin/main
  • HEAD: HEAD

리뷰를 위한 전용 참조인 refs/for 뒤에 브랜치 이름을 적어줌으로써 리뷰 브랜치를 완성하게 된다.

git push oriign HEAD:refs/for/[브랜치명]

성공적으로 게릿 리뷰 공간에 push 가 되었다.

 

 

이제 게릿 웹페이지로 가보자

 

위에서 push 한 리뷰가 Outgoing reviews 카테고리에 잘 들어가 있다.

 

5. 리뷰어 지정

내 수정사항을 게릿에 잘 올려놨으니, 이제 리뷰어들로부터 리뷰를 받아야 한다.

해당 리뷰를 클릭하고 들어가면 Reviewer 옆에 연필 아이콘이 있다.

 

클릭해서 들어가면 addReviewer 를 할수 있고 거기서 이메일이나 이름으로 검색해서 넣고 오른쪽 하단에 SEND 버튼을 누르면 된다.

(오늘 알았는데, 3명이상 넣으면 밑에 너무 많은거 아니냐고 전구로 알려준다 @...@)

 

앞으로 돌아와보면 지정한 리뷰어들이 잘 들어가 있다.

 

 

6. 리뷰 시작!!

저렇게 지정하면 리뷰어들한테 메일이 간다.

 

리뷰어들은 자신의 계정으로 접속하면 Your Turn, Incoming reviews 카테고리에 요청된 리뷰가 들어와있다.

 

이제 니 차례니 니가 일하라는 의미다.

리뷰 의견을 마음껏 적고 저장한다.

 

※ 주의!!!!> 여기까지만 하면 리뷰이(Reviewee) 에게 메일이 가지 않는다.

다시 리뷰 홈으로 돌아와서 Reply 단계까지 해줘야 한다.

 

Reply 시에는 점수를 줘야 한다.

리뷰 의견이 있을때에는 -1 점을 주어 Reviewee 가 확인할게 있다는것을 알려줘야 한다.

여기서 -1점은 마이너스 점수를 의미하지는 않는다. 뭔가 좀 더 확인이 필요한 사항이 있음을 의미한다.

 

이제 다시 Reviewee 로 돌아오자.

Reviewee 는 자신의 계정으로 게릿에 접속하면 이제 다시 내가 할일이 있다는것을 알 수 있다.

 

해당 리뷰를 클릭해서 확인하고 커멘트를 달아서 Reviewer 에게 의사를 표시한다.

 

여기서 Reviewer 가 지적질 했을때 동의한다면

  1. 로컬에서 수정하고
  2. git commit --amend 를 통해 해당 커밋을 수정하고
  3. git push origin HEAD:refs/for/main 으로 리뷰 재등록

을 하면 위에 4번 단계부터 다시 시작하게 된다. 그럼 다시 리뷰어가 보고서 확인한다.

만약 동의하지 않는다면 해당 리뷰에 reply 로 답장을 달아서 SEND 를 하여 리뷰어에게 전쟁의 서막을 알린다.

수정하든 안하든 Reviewer가 이제 마지막으로 인정을 하게 되면 +1 점을 주어 리뷰를 마친다.

 

 

비로소 +1점을 받았다.

 

 

이제 +2 점을 받아야 한다.

점수에 대한 부분은 별도 페이지에서 한다.

여튼 이제 최종 결정권자가 2점을 주고 CI tool 이 verified 까지 주면 (이 verified 부분은 jenkins 연동 부분에서 자세히 설명하겠다)

 

[CR(Code Review), V(verified) 가 모두 녹색 체크가 되면] 이제 비로소 서버에 merge를 할 수가 있다.

merge conflict, base 변경등의 오류가 없다면 [SUBMIT] 버튼이 생기게 되고 클릭하면 이제 드디어 서버에 내 수정사항 하나가 추가된것이다.

 

 

멀고 먼 길을 넘어와서 드디어 코드리뷰라는 workflow 로 일을 하게 되었다.

코드 리뷰 에서 하고 싶었던 Fig.2 의 녹색 리뷰 추가 단계를 드디어 할 수 있게 되었다.


< Prev   2. Gerrit 이란?                |                Next >   4. Git vs. Gerrit

'Gerrit > Gerrit 일반' 카테고리의 다른 글

1. SW 단상 (코드 리뷰)  (0) 2023.10.17
2. Gerrit 이란?  (0) 2023.10.17
4. Git vs. Gerrit  (0) 2023.10.17
5. Gerrit 점수에 대한 단상  (2) 2023.10.17
6. Change ID  (0) 2023.09.01