Magit + Gerrit - auf einen anderen Zweig drücken

7

Ich benutze Gerrit. Wenn ich meine Commits verschieben möchte, verwende ich den folgenden Befehl:

git push origin HEAD:refs/for/master

Wie kann ich denselben Befehl mit neu erstellen Magit?

MatthewRock
quelle

Antworten:

6

Nach einer Weile hatte ich genug Zeit, um es selbst zu beheben.

Ich kenne keinen "out-of-the-box" Weg, dies zu tun; Sie können Magit jedoch erweitern, um es Ihren Anforderungen anzupassen.

Erstens habe ich eine Funktion geschrieben, die zu Gerrit führen würde:

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

Als nächstes habe ich es hinzugefügt, um das Menü zu drücken:

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

Diese beiden Formulare befinden sich in meiner Init-Datei.

Und das ist es! Jetzt kann ich P mzum Gerrit pushen.

Update : Wenn Sie ein bestimmtes Commit und nicht HEAD pushen möchten, können Sie diese Funktion verwenden (auch aktualisiert mit magit-git-command-topdir, wie im Kommentar angegeben):

(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
quelle
2
Wenn Sie ein aktuelles Magit verwenden, wird beim Ausführen eine Fehlermeldung angezeigt (magit-git-command "push origin HEAD:refs/for/master" (magit-toplevel)). Sie möchten (magit-git-command-topdir "git push origin HEAD:refs/for/master")stattdessen verwenden.
user30747
Von 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.Siehe github.com/magit/magit/wiki/…
user30747
3

Verwenden Sie !, um einen generischen git-Befehl zu verwenden, dann können Sie einfach schreiben: push origin HEAD:refs/for/masterfast wie üblich.

Hier gibt es auch ein spezielles Paket gerrit: https://github.com/terranpro/magit-gerrit Ich habe es jedoch nicht persönlich verwendet, weiß also nicht genau, wie ich es verwenden soll.

BEARBEITEN

In einer neueren Version von magitist es jetzt möglich, eine explizite Git-Referenz aus dem rUnterbefehl anzugeben . gerritUm zur Referenz zu gelangen, verwenden Sie einfach:

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

Dies ist zwar keine wirkliche Abkürzung, da Sie noch mehr Tastendrücke ausführen müssen , aber sie ist sofort verfügbar.

Xaldew
quelle
Wie wäre es mit einigen Verknüpfungen? :)
MatthewRock
Ich fürchte, ich kenne keine spezifischen Abkürzungen. Ich habe es gerade mit einem regulären versucht, git push 'elsewhere'aber das stellt 'refs / Heads /' vor das Zweigstellenziel, so dass dies nicht sofort funktioniert gerrit.
Xaldew