답변:
Gerrit에 대한 문서, 특히 "변경 사항 푸시" 섹션에서는 " refs/for/'branch'
Git 클라이언트 도구를 사용한 마법의 참조 "에 대해 설명합니다 .
다음 이미지는 인트로에서 Gerrit로 가져온 것입니다 . Gerrit에게 밀면됩니다 git push gerrit HEAD:refs/for/<BRANCH>
. 그러면 변경 사항이 준비 영역으로 이동합니다 (다이어그램에서 "변경 보류 중"). Gerrit에는 실제로라는 지점이 없습니다 <BRANCH>
. 그것은 자식 클라이언트에 있습니다.
내부적으로 Gerrit은 Git 및 SSH 스택에 대한 자체 구현을 가지고 있습니다. 이를 통해 "매직"참조를 제공 할 수 있습니다 refs/for/<BRANCH>
.
이러한 네임 스페이스 중 하나에서 참조를 작성하기위한 푸시 요청이 수신되면 Gerrit은 자체 로직을 수행하여 데이터베이스를 업데이트 한 다음 조작 결과에 대해 클라이언트에게 있습니다. 성공적인 결과는 고객이 Gerrit가 심판을 만들었다 고 믿게하지만 실제로 Gerrit는 심판을 전혀 만들지 않았습니다. [ 링크-Gerrit, "Gritty Details" ].
패치가 성공적으로 완료된 후 (즉, 패치가 Gerrit로 푸시되어 [ "Pending Changes"스테이징 영역에 배치] 검토되고 검토가 통과 된 후) Gerrit는 "Pending Changes"에서 "Pending Changes"로 변경 사항을 " 신뢰할 수있는 리포지토리 ', 푸시 할 때 수행 한 매직을 기반으로 분기를 푸시 할 지점을 계산합니다 refs/for/<BRANCH>
. 이런 식으로, 성공적으로 검토 된 패치는의 올바른 분기에서 직접 가져올 수 있습니다 Authoritative Repository
.
git push 명령을 완전히 지정하지 않으려면 git config 파일을 수정하십시오.
[remote "gerrit"]
url = https://your.gerrit.repo:44444/repo
fetch = +refs/heads/master:refs/remotes/origin/master
push = refs/heads/master:refs/for/master
이제 간단하게 할 수 있습니다 :
git fetch gerrit
git push gerrit
Gerrit 에 따르면
remote.origin.push
매번 타이핑하거나 붙여 넣는 대신 하드 코딩 된 것이 더 좋습니다!
git fetch
과 git push
는 config로 @DavidDoria는 위에서 언급 한.