Programing

왜 git push gerrit HEAD : git push origin master 대신 refs / for / master가 사용됩니까?

lottogame 2020. 6. 21. 19:42
반응형

왜 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 워크 플로우

패치가 성공적으로 완료된 후 (즉, 패치가 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 에 따르면

참고 : https://stackoverflow.com/questions/10461214/why-is-git-push-gerrit-headrefs-for-master-used-instead-of-git-push-origin-mast

반응형