왜 git push gerrit HEAD : git push origin master 대신 refs / for / master가 사용됩니까?
방금 gerrit를 사용하기 시작했으며 git push gerrit HEAD:refs/for/master
대신에 왜 우리가 해야하는지 알고 싶습니다.git push origin master
내가 git push origin master
하면 오류 메시지가 나타납니다! [remote rejected] master -> master (prohibited by Gerrit)
Gerrit에 대한 문서, 특히 "Push changes" 섹션은 " 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 에 따르면
'Programing' 카테고리의 다른 글
AngularJS-원시 / 더러움과 터치 / 터치되지 않은 차이 (0) | 2020.06.22 |
---|---|
Docker 컨테이너에서 스키마를 사용하여 MySQL 데이터베이스를 초기화하는 방법은 무엇입니까? (0) | 2020.06.22 |
HTML5 Canvas 뷰포트의 너비 100 % 높이? (0) | 2020.06.21 |
jQuery를 사용하여 이미지를 비동기 적으로로드 (0) | 2020.06.21 |
암호를 묻지 않고 PowerShell 자격 증명 사용 (0) | 2020.06.21 |