Wie kann verhindert werden, dass Magit fragt, wohin ein Zweig geschoben werden soll?

10

Beim Aufruf magit-push-currentmit P Paus dem Statuspuffer, Magit 2.1.0fragt mich , wo die Niederlassung auf das erste Mal drücken, wenn stromaufwärts nicht gesetzt ist.

Wie kann der Name automatisch generiert werden, wie zuvor?

z1naOK9nu8iY5A
quelle
2
Falls Sie es nicht wissen, ist der automatisch generierte Name eine der Abschlussoptionen. Wenn Sie also zum ersten Mal some-branch-nameauf die originFernbedienung drücken , können Sie wahrscheinlich einfach tippen o TAB s TABund erhalten den gewünschten Namen.
Malabarba
Oh ok ich wusste es nicht, danke. Das Problem ist, dass ich viele Zweige habe, die mit denselben Präfixen beginnen, was nicht sehr praktisch ist. Außerdem habe ich immer entfernte Zweige mit demselben Namen wie die lokalen Zweige eingerichtet.
z1naOK9nu8iY5A

Antworten:

8

Update: Der unten erwähnte "Push-Zweig" wurde inzwischen implementiert. Weitere Informationen finden Sie in der Dokumentation zum Verzweigen .

Sie müssen den Upstream-Zweig einmal einstellen. Sobald Sie das getan haben P PSchübe zu , dass und Sie werden Listen von unpulled und nicht gedrückten Änderungen in dem Statuspuffer erhalten (sofern vorhanden).

Es gibt verschiedene Möglichkeiten, den Upstream-Zweig einzurichten. Sie können den --set-upstreamSchalter aus dem Push-Popup verwenden : P -u P. Oder verwenden Sie den Befehl, der den Upstream festlegt und nichts anderes tut : b u.

Außerdem legt Magit jetzt beim Erstellen eines neuen Zweigs automatisch den Upstream-Zweig fest, sofern der "Startpunkt" ein Zweigname ist. Dies funktioniert für lokale und entfernte "Upstreams". Beachten Sie jedoch, dass dies beim Pushing nicht hilfreich ist, wenn Sie einen lokalen Zweig als Ausgangspunkt auswählen. Das Verschieben vom aktuellen Repository in das aktuelle Repository ist offensichtlich nicht sinnvoll und nicht zulässig.

Wenn der "Upstream" -Zweig tatsächlich ein anderer lokaler Zweig ist, P Pverhält er sich so, als ob kein Upstream-Zweig konfiguriert wäre, und verhält sich genau so P e. Gleiches gilt, wenn überhaupt kein Upstream konfiguriert ist.

Dies liegt an einer Einschränkung in Git: Man kann einem Zweig nur einen anderen Zweig zuordnen, und dieser Zweig wird dann als "Upstream-Zweig" bezeichnet. Es wäre besser, wenn es mindestens einen "Upstream" - und einen "Publish" -Zweig gäbe. Ich beabsichtige, das irgendwann in Magit umzusetzen. Siehe Ausgabe Nr. 1485 .

Wenn Sie also in der Lage sein möchten, mit genau P Pdann zu pushen, muss der "Upstream" -Zweig zB "Ursprung / Master" sein, nicht "Master".


Ich denke darüber nach, eine Push-Variante hinzuzufügen, die immer nur git pushohne Argumente läuft . Was das macht, hängt dann ausschließlich von der Git-Konfiguration ab.

Tarsius
quelle
Ich habe von verzweigt masterund es wurde nicht Upstream eingerichtet. Sollte ich vielleicht von verzweigen origin/master, um den Upstream automatisch einzustellen?
z1naOK9nu8iY5A
Siehe aktualisierte Antwort.
Tarsius
1
Verzweigung vom origin/masterSet origin/masterals Upstream, aber ich hätte erwartet, origin/branch-nameals Upstream zu haben .
z1naOK9nu8iY5A
Wenn Sie das möchten, ist es am besten, dies während des Pushs zu tun. P -p P <... completion ...> RETBeachten Sie, dass dies origin/branch-nameals Abschlusskandidat angeboten wird, sodass Sie es nicht eingeben müssen.
Tarsius
2
Dies ist schmerzhaft, wenn Sie Gitflow- und Pull-Anforderungen für die Codeüberprüfung mit einem Zweig pro Feature verwenden, da Sie normalerweise nur einmal pushen und immer einen Remote-Zweig mit demselben Namen wie der lokale Zweig erstellen müssen. Das Verschieben in einen Zweig mit einem anderen Namen wäre ein Ende der Codeüberprüfung.
Barry Kelly
3

Ich verwende den folgenden Rat, der automatisch aktiviert wird, --set-upstreamwenn der aktuelle Zweig noch keinen Upstream hat:

(defun magit-push-arguments-maybe-upstream (magit-push-popup-fun &rest args)
  "Enable --set-upstream switch if there isn't a current upstream."
  (let ((magit-push-arguments
         (if (magit-get-remote) magit-push-arguments
           (cons "--set-upstream" magit-push-arguments))))
    (apply magit-push-popup-fun args)))
(advice-add 'magit-push-popup :around #'magit-push-arguments-maybe-upstream)

In Kombination mit der Ido-Vervollständigung ermöglicht dies das Verschieben eines neuen Zweigs mit P P RET:

;; NOTE: requires ido-completing-read+
(setq magit-completing-read-function #'magit-ido-completing-read)
npostavs
quelle
Das ist so cool! Vielen Dank!
z1naOK9nu8iY5A
0

Ich erstelle einfach den neuen Zweig mit b cund bearbeite dann die .git/configDatei so, dass sie zeigt, origin/branchanstatt mit all dem Magit 2-Zeug herumzuspielen, was sowieso nicht zu funktionieren scheint.

Veränderung:

[branch "fix_something"]
  remote = .
  merge = refs/heads/master

Zu

[branch "fix_something"]
  remote = origin
  merge = refs/heads/fix_something

Dies funktioniert, obwohl ich in magit2 noch keine Tastenkombination gefunden habe, die das Gleiche bewirkt. Der Versuch, die Fernbedienung einzustellen, funktioniert nicht, da sie im Ursprung noch nicht vorhanden ist.

David N. Welton
quelle
1
Der Upstream kann mit eingestellt werden bu. Aber das nutzt git branch --set-upstream-tound wie Sie wissen, kann Git keinen nicht existierenden Zweig als Upstream festlegen und Magit auch nicht.
Tarsius
@tarsius magit 1 schien zu tun, was ich brauchte. Ich versuche nur, einen Anschein dieses Workflows zurückzugewinnen.
David N. Welton