다른 포스트에서 이어집니다.
프로젝트의 추가
프로젝트를 추가하는 방법에는 기본적으로 세 가지가 있다고 한다.
나는 web page를 통해 생성을 시도해본다.
Gerrit Web page를 통해 프로젝트 생성
Projects > Create New Project 로 가서 Project Name에 temp
를 입력하고 생성해본다.
이러면 원래 지정해두었던 ~/repository
디렉토리 안에 새로운 temp.git
이라는 저장소가 생성된다.
사용자 추가 (Server side)
사용자의 추가는 gerrit
사용자 계정에서 아래 명령을 통해 추가한다. 이전에 admin을 추가했었다.
$ htpasswd ~/opt/gerrit/etc/passwords user
|
해당 사용자로 처음 로그인을 시도하면 이름, 이메일 및 SSH public key를 넣으라고 나온다.
이름과 이메일을 넣고, SSH public key는 다음과 같이 생성하여 넣으면 된다.
만약, 이전에 smtp 설정을 하지 않았다면 새 사용자의 email 인증은 진행할 수 없다.
SSH public key 생성 (Client side)
아래와 같이 생성된 key의 내용을 복사하여 gerrit에 넣고 Add를 눌러 추가한다.
$ cd ~ $ mkdir .ssh $ cd .ssh $ ssh-keygen $ cat id_rsa.pub
|
Project clone (Client side)
새로 추가한 user
계정에서 gerrit 접속 후 projects > List > temp
로 가면 현재 프로젝트를 clone할 수 있는 주소를 알 수 있다.
http와 ssh로 나뉘어 제공되며, 나는 ssh로 clone 해본다.
git clone ssh://user@192.168.0.99:29418/temp
|
push 1차 실패
파일 생성 후 push를 시도해본다.
$ touch b $ git add -A $ git commit -m "[temp] touch b" $ git push Counting objects: 4, done. Delta compression using up to 2 threads. Compressing objects: 100% (2/2), done. Writing objects: 100% (2/2), 231 bytes | 0 bytes/s, done. Total 2 (delta 0), reused 0 (delta 0) remote: Branch refs/heads/master: remote: You are not allowed to perform this operation. remote: To push into this reference you need 'Push' rights. remote: User: user remote: Please read the documentation and contact an administrator remote: if you feel the configuration is incorrect remote: Processing changes: refs: 1, done To ssh://user@192.168.0.99:29418/temp ! [remote rejected] master -> master (prohibited by Gerrit) error: 레퍼런스를 'ssh://user@192.168.0.99:29418/temp'에 푸시하는데 실패했습니다
|
직접 push할 수 있는 권한이 없다.
검색을 해보면 이전에는 git review라는 명령어가 있었던 것 같은데 지금은 존재하지 않는다.
$ git remote -v
해서 temp 저장소에 대한 정보를 보면 master의 merge가 refs/heads/master로 되어있는 것을 확인할 수 있다.
하지만 gerrit을 통해 code review를 받기 위해서는 refs/for/master 로 push를 해야한다고 한다.
The refs/for/ prefix is used to map the Gerrit concept of “Pushing for Review” to the git protocol.
시키는대로 한다.
$ git push origin HEAD:refs/for/refs/heads/master
|
push 2차 실패
또 실패했다. 다행인 것은 에러가 다르다.
Counting objects: 4, done. Delta compression using up to 2 threads. Compressing objects: 100% (2/2), done. Writing objects: 100% (2/2), 231 bytes | 0 bytes/s, done. Total 2 (delta 0), reused 0 (delta 0) remote: Processing changes: refs: 1, done remote: ERROR: missing Change-Id in commit message footer remote: remote: Hint: To automatically insert Change-Id, install the hook: remote: gitdir=$(git rev-parse --git-dir); scp -p -P 29418 user@192.168.0.99:hooks/commit-msg ${gitdir}/hooks/ remote: And then amend the commit: remote: git commit --amend remote: To ssh://user@192.168.0.99:29418/temp ! [remote rejected] HEAD -> refs/for/refs/heads/master (missing Change-Id in commit message footer) error: 레퍼런스를 'ssh://user@192.168.0.99:29418/temp'에 푸시하는데 실패했습니다
|
Change-Id가 없단다. 추적을 위해 반드시 필요한 부분이니 또 시키는대로 해본다.
$ scp -p -P 29418 user@192.168.0.99:hooks/commit-msg .git/hooks/ $ git commit --amend
|
git log
를 쳐보면 Change-Id가 생성된 것을 확인할 수 있다. 기쁜 마음으로 git push origin HEAD:refs/for/refs/heads/master
해보자.
드디어 성공했다.
Counting objects: 4, done. Delta compression using up to 2 threads. Compressing objects: 100% (2/2), done. Writing objects: 100% (2/2), 278 bytes | 0 bytes/s, done. Total 2 (delta 0), reused 0 (delta 0) remote: Processing changes: new: 1, refs: 1, done remote: remote: New Changes: remote: http://192.168.0.99:80/1 [temp] touch b remote: To ssh://user@192.168.0.99:29418/temp * [new branch] HEAD -> refs/for/refs/heads/master
|
Gerrit에서 확인하기
브라우저로 가서 gerrit에 들어가본다.
My > Changes
로 가면 방금 push한 commit을 확인할 수 있다.
administrator 또는 reviewer group에 속한 사람의 계정으로 접속하면 코드를 확인 및 점수를 줄 수 있고 commit을 submit (merge)할 수 있다.
자신의 commit에 변경사항이 발생하면 email로도 알려준다. 좋은 세상이다.
참조