Estou usando o gerrit. Quando quero enviar meus commits, uso o seguinte comando:
git push origin HEAD:refs/for/master
Como posso recriar o mesmo comando usando Magit
?
Depois de um tempo, consegui ter tempo suficiente para tentar consertar isso sozinho.
Não conheço nenhuma maneira "pronta para uso" de fazer isso; no entanto, você pode expandir o magit para atender às suas necessidades.
Em primeiro lugar, escrevi uma função que empurrava para o gerrit:
(defun magit-push-to-gerrit ()
(interactive)
(magit-git-command "push origin HEAD:refs/for/master" (magit-toplevel)))
Em seguida, adicionei-o ao menu push:
(transient-append-suffix 'magit-push "p"
'("m" "Push to gerrit" magit-push-to-gerrit))
Esses dois formulários estão no meu arquivo init.
E é isso! Agora eu posso usar P mpara empurrar para gerritar.
Atualização : Se você deseja enviar por push um commit específico e não o HEAD, pode usar esta função (também atualizada com magit-git-command-topdir, conforme mencionado no comentário):
(defun magit-push-to-gerrit (source)
"Push an arbitrary branch or commit to gerrit. The source is read in the minibuffer."
(interactive
(let ((source (magit-read-local-branch-or-commit "Push")))
(list source)))
(magit-git-command-topdir (concat "git push origin " source ":refs/for/master")))
(magit-git-command "push origin HEAD:refs/for/master" (magit-toplevel))
. Você vai querer usar(magit-git-command-topdir "git push origin HEAD:refs/for/master")
.magit-obsolete.el
:* If you add additional arguments and/or actions to Magit's popups, then you have to port that to modify the new \"transients\" instead.
Consulte github.com/magit/magit/wiki/…Use
!
para usar um comando git genérico, para que você possa escrever com simplicidade:push origin HEAD:refs/for/master
quase como de costume.Há também um pacote dedicado para
gerrit
aqui: https://github.com/terranpro/magit-gerrit No entanto, não o usei pessoalmente, portanto, não sei exatamente como usá-lo.EDITAR
Em uma versão recente de
magit
, agora é possível especificar um git refspec explícito a partir do rsubcomando. Portanto, para enviar para ogerrit
refspec, basta usar:P r"origem" RET"CABEÇA: refs / for / master"
Embora isso não seja realmente um atalho, você deve pressionar ainda mais as teclas, mas está disponível imediatamente.
fonte
git push 'elsewhere'
mas que antecede 'refs / heads /' ao destino da filial, para que não pareça funcionar imediatamentegerrit
.