Gerrit 은 Change-ID 라는게 있다.
이게 뭐고 Git 의 commit-id 랑은 어떤 차이점이 있는지 알아보자.
우선 git 의 commit-id 부터 알아보자.
Git은 SHA-1 해시를 사용하여 체크섬을 만든다. 만든 체크섬은 40자 길이의 16진수 문자열이다. 파일의 내용이나 디렉토리 구조를 이용하여 체크섬을 구한다. SHA-1은 아래처럼 생겼다.
24b9da6552252987aa493b52f8696cd6d3b00373
commit id 는 개발자가 수정사항을 git repository 에 반영할때마다 생성되는 고유 ID 다.
이 고유 ID 로 Git 은 해당 수정사항을 관리한다.
git log 를 통해 보면 쉽게 id 를 확인할 수 있다.
확인을 위해 간단하게 커밋을 하나 만들어 보자.
그리고 git log 로 확인해 보자.
94e198 로 시작하는 commit id 하나가 만들어졌다.
commit 을 하나 더 만들고 확인해 보자.
9d6a5d 로 시작하는 commit id 가 뒤이어 만들어졌다.
그런데 두번째 커밋에 문제가 있어 두번째 커밋을 수정해야 할 상황이 생겼다.
amend 옵션으로 두번째 커밋을 고쳐서 반영해보자.
다시 git log 로 확인하자.
차이점이 보이는가?
Fig.1 과 Fig.2 는 결과적으로 커밋이 2개만 있는 같은 상황인다.
그런데 Fig.1 과 Fig.2 의 두번째 커밋의 커밋 id 가 달라졌다.
오호~
즉 commit id 는 git commit 이라는 명령어를 수행할때마다 새롭게 부여된다.
이제 Change id 를 알아보자.
얼핏보면 commit id 랑 별반 다를것 같지 않다.
필요한 작업을 하고 commit 을 한다.
git log 로 확인해보면 commit id 와 change id 가 모두 생성되어 있음을 알 수 있다.
서버에 push 하려고 했는데, Jira 티켓 아이디를 안넣어서 reject 먹었다.
다시 재수정 하자.
git log 로 상태를 확인해 보자.
뭔가 좀 이상한게 보이는가?
commit id 는 달라졌는데 Change-Id 는 동일하다.
응….??
일단 서버에 push 하고
한번 더 수정해보자.
git log 로 확인해 보자.
역시 commit id 는 변경이 되었는데 change-id 는 변경이 되지 않았다.
오호~
Change-Id 는 한개 commit 이 여러번 수정되어도 변하지가 않는다.
여튼 서버에 push 하자.
이번엔 게릿 웹의 코드 리뷰를 보자.
두번 서버에 push 했기때문에 patchset 이 2개이고 두번째 patchset 의 commit id (786ef5c) 가 표시되고 있다.
저 patchset을 첫번째로 선택하면 첫번째 commit id (9988df4)가 표시된다.
즉, change-id 는 Gerrit 에 push 한 코드리뷰의 id 이고 이는 하나의 리뷰에 대해서는 커밋을 여러번 하더래도 변하지 않는다.
하나의 change-id 로 여러 commit 을 관리해서 관련된 수정사항을 하나의 리뷰에 넣는 설계인 것이다.
이는 리뷰를 받다보면 이런저런 지적질로 재수정이 허다하게 발생할것이기 때문에 리뷰만을 위한 별도 id 가 필요했던 것이다.
이렇게 함으로써 게릿은 한개 리뷰에 대한 모든 변경사항을 축적할 수 있고 이는 리뷰어,리뷰이 모두에게 히스토리로써 남게 된다.
정리하면,
commit id = local 에 커밋할때 생성되는 id, amend 커밋시에는 변경된다. change id = 게릿 서버에 push 할때 리뷰 단위로 사용되는 id, amend 커밋시에도 변경되지 않는다. |
[참고] Change-Id 는 커밋 아이디와 구분을 위해서 대문자 “I” 로 시작한다.
'Gerrit > Gerrit 일반' 카테고리의 다른 글
1. SW 단상 (코드 리뷰) (0) | 2023.10.17 |
---|---|
2. Gerrit 이란? (0) | 2023.10.17 |
3. Gerrit Workflow (0) | 2023.10.17 |
4. Git vs. Gerrit (0) | 2023.10.17 |
5. Gerrit 점수에 대한 단상 (2) | 2023.10.17 |