Magit + gerrit - enviar para outro ramo

7

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?

MatthewRock
fonte

Respostas:

6

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")))
MatthewRock
fonte
2
Se estiver usando um Magit atualizado, você receberá um erro ao executar (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").
user30747
De 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/…
user30747 15/10/1919
3

Use !para usar um comando git genérico, para que você possa escrever com simplicidade: push origin HEAD:refs/for/masterquase como de costume.

Há também um pacote dedicado para gerritaqui: 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 o gerritrefspec, 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.

Xaldew
fonte
Que tal alguns atalhos? :)
MatthewRock 20/01
Com medo de não conhecer nenhum atalho específico. Eu tentei apenas um regular, git push 'elsewhere'mas que antecede 'refs / heads /' ao destino da filial, para que não pareça funcionar imediatamente gerrit.
precisa saber é o seguinte