반응형
  • gerrit이란?
    • Google에서 만든 code review tool, 커밋단위로 리뷰를 진행하여 -2,-1,0,2,1점을 줄수 있으며, 2점을 받아야 main branch로 소스적용(submit)할 수 있음 
    • submit된 리뷰는 추가수정(patchset올리기)할 수 없음, commit message도 못고침, reviewer추가는 할 수 있음 
      • 추가 시도하면 다음 에러발생

  • code review를 올린다는 것은 다음과 같이 바로 push하지 않고 아래와 같이 push하는 것
    • git push origin HEAD:refs/for/[branch name] 공개리뷰
    • git push origin HEAD:refs/drafts/[branch name] 비공개리뷰
  • 위 push가 무슨 뜻인지 이해해보자
    • 원래 git push도 많은 것들이 생략되어 있음, 즉 원래는
      • git push [<repository>] [<refspec>...]
      • git push [remote repository, 생략하면 origin] [<local branch refs>:<remote branch refs>]
      • git push = git push origin master = git push origin refs/heads/master:refs/heads/master
      • 이말인즉슨, 내 master에서 remote의 master로 push하라는 것
    • 그렇다면 git push origin HEAD:refs/for/master (branch name) 얘는 이런의미!
      • 내 것중에 HEAD에서 refs/for/master라는 곳으로 push하라
      • HEAD는 내가 현재 branch에서 commit한 최신 위치를 가리킴, master일수도 있고 아닐수도 있고 remote랑 연결안된 애일수도 있고, 아무튼 현재 checkout되어 있는 브랜치에서 작업한 사항을 말하는 것
      • refs/for/master는 master로 적용되기 위한 code review(그냥 임시 브랜치라고 볼수 있을 것 같음)를 위한 공간, +2점을 받으면 master branch로 merge (이것을 submit이라 표현)될수 있음

  • code review는 patchSet이라고도 하며 리뷰받은 것들을 계속 수정해가며 추가할 수 있는데, 그러기 위해서 커밋메세지 내 change-id라는 것을 통해 동일 code review patch라는 것을 연결할 수 있음
    • 커밋메세지 연결을 위해서 아래 작업 필요
      • scp -p -P 29448 sy919.kim@wall.lge.com:hook/commit-msg ./git/hooks/ (를 commit전에 입력해야 한다고 하는데 hook..가 없다며 에러남)
      • commit message 마지막에 Change-Id: Ib99b87b88cead9f5afe4beaee624c1935f4f33b0 이걸 항상 연결시켜줘야 함 - git/hooks/commit-msg가 저절로 해줌
      • Change-Id: review에 대한 revision (uniqueID)

  • git push origin master → code review, merge없이 바로 push, 하면 안됨
    • 뭔가 원복하기 위해서 이거저거 해봤으나 안됨: git push HEAD:refs/for/master를 다시 실행하면 다음 메세지뜸
      warning: push.default를 설정하지 않았습니다. 묵시적 값은 깃 2.0에서
      'matching'에서 'simple'로 바뀌었습니다. 이 메시지를 표시하지
      않고 과거의 동작을 유지하려면 다음과 같이 하십시오:이 메시지를 표시하지 않고 새 동작을 받아들이려면 다음과 같이
      하십시오:push.default가 'matching'으로 설정되면, 로컬 브랜치를 이미 같은 이름이
      있는 리모트 브랜치로 푸시합니다.더 자세한 정보는 'git help config'에서 'push.default' 설명을 보십시오.
      ('simple' 모드는 깃 1.7.11에 추가되었습니다. 과거 버전의 깃을 사용하게
      되면 비슷한 'current' 모드를 사용하십시오.)
    • 깃 2.0부터 더 보수적인 'simple' 동작이 기본값입니다. 여기서는 현재
      브랜치를 'git pull'에서 현재 브랜치를 업데이트할 때 사용하는 해당
      리모트 브랜치로 푸시합니다.
    • git config --global push.default simple
    • git config --global push.default matching
  • git push origin HEAD:/for/refs/master 로 잘못 쓰면 remote에 for/refs/master라는 branch가 자동생성되고 글로 push되며, 원래 하려고 했던 master로 push로 다시 push하면 new change가 아니라서 push할 수 없다고 함
    • checkout 해서 일단 local에 for/refs/master를 받고  git branch --delete 으로 branch 삭제 (다른 곳으로 가야 삭제가능)후 push 하여 remote branch까지 삭제해줌, 그후 다시 push 하면 동작함

[CCC: build repository 변경]


차이는?

반응형

'git' 카테고리의 다른 글

git rebase, cherry-pick을 잘 이해해보자  (0) 2019.06.11
git tag  (0) 2019.06.07
git diff troubleshooting  (0) 2019.06.07
Git: ssh public key 등록  (0) 2019.04.26
git  (0) 2019.04.26

+ Recent posts