반응형
- gerrit이란?
- Google에서 만든 code review tool, 커밋단위로 리뷰를 진행하여 -2,-1,0,2,1점을 줄수 있으며, 2점을 받아야 main branch로 소스적용(submit)할 수 있음
- submit된 리뷰는 추가수정(patchset올리기)할 수 없음, commit message도 못고침, reviewer추가는 할 수 있음
- 추가 시도하면 다음 에러발생
- (change http://mod.lge.com/prosys/27429 closed)
error: failed to push some refs to 'ssh://mod.lge.com:29450/rich-dev/cdp-web'
- (change http://mod.lge.com/prosys/27429 closed)
- 추가 시도하면 다음 에러발생
- 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이라 표현)될수 있음
- 원래 git push도 많은 것들이 생략되어 있음, 즉 원래는
- 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 HEAD:refs/for/master를 다시 실행하면 다음 메세지뜸
- 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 변경]
- 먼저 webOS build git repository를 clone
- wall에서 meta-lg-webos로 project검색: http://wall.lge.com:8110/#/admin/projects/webos-pro/meta-lg-webos
- git clone ssh://sy919.kim@wall.lge.com:29448/webos-pro/meta-lg-webos && scp -p -P 29448 sy919.kim@wall.lge.com:hooks/commit-msg meta-lg-webos/.git/hooks/
- branch 이동: git checkout @glacier, git checkout @gld4tv 등등
- 다른 commit을 참고해서 앱의 bb 파일위치로 이동
- 반영할 submissions tag의 revision (git show-ref submissions/5) 변경후 commit
차이는?
- git fetch ssh://sy919.kim@mod.lge.com:29450/rich-dev/cdp-web refs/changes/15/1615/2 && git checkout FETCH_HEAD
- 가지고 온다음 그 브랜치로 옮겨감
- git fetch ssh://sy919.kim@mod.lge.com:29450/rich-dev/cdp-web refs/changes/15/1615/2 && git cherry-pick FETCH_HEAD
- 현재 브랜치에서 이 커밋만 가져옴
- git fetch ssh://sy919.kim@mod.lge.com:29450/rich-dev/cdp-web refs/changes/15/1615/2 && git format-patch -1 --stdout FETCH_HEAD
- patch 파일생성후 그 파일을 am 명령어로 적용할 수 있음 (중앙저장소 다운시 유용)
- git pull ssh://sy919.kim@mod.lge.com:29450/rich-dev/cdp-web refs/changes/15/1615/2
- pull=fetch + merge이므로 merge됨 즉, 복사커밋 생성후 붙이는 형식이 아니라 2개 커밋을 머지하는 형식으로 적용됨
반응형
'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 |