Respostas:
A documentação do Gerrit, em particular a seção "Alterações por push" , explica que você envia para a " refs/for/'branch'
referência mágica usando qualquer ferramenta cliente do Git".
A imagem a seguir é retirada da Introdução à Gerrit . Quando você empurra para Gerrit, você faz git push gerrit HEAD:refs/for/<BRANCH>
. Isso envia suas alterações para a área de preparação (no diagrama "Alterações pendentes"). Gerrit na verdade não tem um ramo chamado <BRANCH>
; está ao cliente git.
Internamente, a Gerrit tem sua própria implementação para as pilhas Git e SSH. Isso permite que você forneça as referências "mágicas" refs/for/<BRANCH>
.
Quando uma solicitação push é recebida para criar uma referência em um desses espaços para nome, o Gerrit executa sua própria lógica para atualizar o banco de dados e, em seguida, mente ao cliente sobre o resultado da operação. Um resultado bem-sucedido faz com que o cliente acredite que a Gerrit criou a ref, mas, na realidade, a Gerrit não criou a ref. [ Link - Gerrit, "Detalhes detalhados" ].
Após um patch bem-sucedido (ou seja, o patch foi enviado para a Gerrit, [colocando-o na área de preparação "Pending Changes"], revisado e a revisão foi aprovada), Gerrit envia a alteração de "Pending Changes" para o " Repositório autoritativo ", calculando em qual ramificação o envio deve ser baseado na mágica em que você foi enviado refs/for/<BRANCH>
. Dessa forma, os patches revisados com sucesso podem ser extraídos diretamente das ramificações corretas do Authoritative Repository
.
Para evitar ter que especificar completamente o comando git push, você pode modificar o seu arquivo de configuração git:
[remote "gerrit"]
url = https://your.gerrit.repo:44444/repo
fetch = +refs/heads/master:refs/remotes/origin/master
push = refs/heads/master:refs/for/master
Agora você pode simplesmente:
git fetch gerrit
git push gerrit
Isso é de acordo com Gerrit
remote.origin.push
vez de digitar / colar todas as vezes!
git fetch
e git push
com a configuração @DavidDoria mencionada acima.