Magit + gerrit - empujar a otra rama

7

Estoy usando gerrit Cuando quiero empujar mis commits, utilizo el siguiente comando:

git push origin HEAD:refs/for/master

¿Cómo puedo recrear el mismo comando usando Magit?

MatthewRock
fuente

Respuestas:

6

Después de un tiempo logré tener suficiente tiempo para tratar de arreglarlo yo mismo.

No conozco ninguna forma "inmediata" de hacer esto; sin embargo, puede ampliar magit para satisfacer sus necesidades.

En primer lugar, escribí una función que empujaría a gerrit:

(defun magit-push-to-gerrit ()
  (interactive)
  (magit-git-command "push origin HEAD:refs/for/master" (magit-toplevel)))

A continuación, lo agregué al menú push:

(transient-append-suffix 'magit-push "p"
  '("m" "Push to gerrit" magit-push-to-gerrit))

Estas dos formas están en mi archivo init.

¡Y eso es! Ahora puedo usar P mpara empujar a gerrit.

Actualización : si desea impulsar una confirmación específica y no HEAD, puede usar esta función (también actualizada con magit-git-command-topdir como se menciona en el comentario):

(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
fuente
2
Si usa un Magit actualizado, obtendrá un error al ejecutarlo (magit-git-command "push origin HEAD:refs/for/master" (magit-toplevel)). Querrás usar (magit-git-command-topdir "git push origin HEAD:refs/for/master")en su lugar.
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.Ver github.com/magit/magit/wiki/…
user30747
3

Use !para usar un comando git genérico, luego puede escribir simplemente: push origin HEAD:refs/for/mastercasi como de costumbre.

También hay un paquete dedicado gerritaquí: https://github.com/terranpro/magit-gerrit Sin embargo, no lo he usado personalmente, así que no sé exactamente cómo usarlo.

EDITAR

En una versión reciente de magit, ahora es posible especificar un git refspec explícito desde el rsubcomando. Por lo tanto, para avanzar a la gerritespecificación de referencia, simplemente use:

P r"origen" RET"HEAD: refs / for / master"

Aunque, esto no es realmente un atajo ya que tiene que presionar aún más teclas, pero está disponible de inmediato.

Xaldew
fuente
¿Qué tal algunos atajos? :)
MatthewRock
Me temo que no conozco ningún atajo específico. Acabo de probar un regular git push 'elsewhere'pero eso antepone 'referencias / cabezas /' al destino de la sucursal, por lo que no parece funcionar de inmediato gerrit.
Xaldew