Wie stelle ich den Upstream-Zweig so ein, dass ein lokaler Zweig in Magit verschoben wird?

11

Soweit ich mich erinnere, konnte ich dies, wenn ich an einem Zweig arbeite, z. B. my-feature-branchaus dem magit-statusMenü mit P Pund dann den entfernten Zweig aus einer Liste auswählen, origin/my-feature-branchdie oben stand. Das hat wunderbar funktioniert.

In letzter Zeit konnte ich ab dieser Diskussion etwas Ähnliches tun P -u e(Öffnen des magit-push-popup, Setzen des --set-upstreamFlags und Verwenden efür anderswo), wodurch ich ebenfalls aus einer Liste von Zweigen auswählen konnte, die mit beginnen origin/my-feature-branch. Das hat auch bei mir gut funktioniert. In jüngerer Zeit funktioniert dies jedoch nicht mehr, und ich konnte nicht herausfinden, wie ein Upstream-Zweig am besten eingerichtet werden kann.

Wenn ich P edie erste Option für einen Zweig verwende, zu origin/my-feature-branchder ich pushen möchte, ist dies fast immer das, was ich möchte. Es wird jedoch nicht origin/my-feature-branchals Upstream für meine lokale Niederlassung festgelegt. Die Verwendung P uermöglicht es mir, den Upstream-Zweig auszuwählen, origin/my-feature-branchbefindet sich jedoch nicht in der Liste, und ich muss origin/my-feature-branchohne Tab-Vervollständigung tippen (ich weiß, dass dies nicht schwierig ist, aber anfällig für Benutzerfehler und langsamer als die Befehlszeile).

Ist dies die einzige Möglichkeit, jetzt einen Upstream-Zweig einzurichten, oder fehlt mir etwas? Ich habe mir andere Diskussionen und Dokumentationen zu diesem Thema angesehen, aber alle Quellen, die ich gefunden habe, scheinen veraltet zu sein.

elethan
quelle
1
Ich denke, das <remote>/<branch>Teil wurde versehentlich aus der Eingabeaufforderung herausgelassen (siehe diesen Kommentar ). In der Zwischenzeit können Sie magit-push-current-set-remote-if-missingauf Null setzen.
Kyle Meyer
Ich habe das gerade behoben. Meine Antwort unten geht von diesem Fix aus.
Tarsius
Einige andere verwandte Probleme gefunden und behoben. Sie müssen wahrscheinlich einige Stunden warten, bis Melpa aufholt, bevor alles unten zu 100% korrekt ist.
Tarsius

Antworten:

11

Es gibt verschiedene Möglichkeiten, den Upstream einzustellen, während oder gleichzeitig gedrückt wird.

Wenn dies magit-push-current-set-remote-if-missingnicht nilder Fall ist (Standardeinstellung), wird Folgendes angezeigt:

Push feature to
 p pushRemote, after setting that
 u @{upstream}, after setting that
 e elsewhere

Um dies zu drücken origin/featureund als Upstream festzulegen, drücken Sie uund RETakzeptieren Sie dann den Standard-Abschlusskandidaten.

Wenn magit-push-current-set-remote-if-missingja nil, dann würden Sie dies stattdessen sehen:

Push feature to
 e elsewhere

Wenn Sie pjetzt gedrückt haben, wird Ihnen mitgeteilt, dass der Upstream nicht konfiguriert ist (was bedeutet, dass Sie nicht zum Upstream pushen können, wenn kein Upstream vorhanden ist).

Wenn dies magit-push-current-set-remote-if-missingjedoch nilder Fall ist , wird die Liste der Schalter angezeigt --set-upstream, sodass Sie sie P - u pwie gewohnt verwenden können (außer dass das zweite p in Kleinbuchstaben geschrieben ist). Es gibt jedoch eine Komplikation: Nachdem Sie den Wert von magit-push-current-set-remote-if-missinggeändert haben, müssen Sie Emacs neu starten, damit er angezeigt --set-upstreamoder ausgeblendet wird.

Schließlich können Sie den Upstream mit dem Befehl "Set Upstream (und nichts anderes tun)" einstellen : b uorigin/masterRET. Beachten Sie, dass Sie bei Verwendung dieses Ansatzes nur einen bereits vorhandenen Zweig auswählen können.


Aber es wäre besser, die Push-Fernbedienung zu konfigurieren und darauf zu pushen. Weitere Informationen zur Push-Fernbedienung und zu den Unterschieden zum Upstream finden Sie im Verzweigungsknoten im Info-Handbuch (die Webversion wurde noch nicht aktualisiert).

Grundsätzlich ist der Upstream-Zweig höchstwahrscheinlich der Zweig, in den Ihr Feature-Zweig schließlich zusammengeführt wird (durch Zusammenführen oder erneutes Basieren, nicht durch Drücken) origin/master. Auf der Push-Fernbedienung können Sie Ihre Feature-Zweige verschieben, während Sie noch daran arbeiten, damit andere Personen sie zusammenführen können. Wenn der lokale Zweig benannt ist featureund die Push-Fernbedienung my-fork, wird durch Drücken dieses Zweigs mit P pgedrückt my-fork/feature. (Der "Push-to-Branch" kann nicht konfiguriert werden. Der Name des Zweigs auf der Push-Fernbedienung stimmt immer mit dem lokalen Namen überein.)

Während Ihre Frage so etwas wie "Wie drücke ich auf den Upstream, während ich gleichzeitig den Upstream konfiguriere" lautete, ist meine Empfehlung, überhaupt nicht auf den Upstream zu pushen, sondern stattdessen auf die Push-Fernbedienung.

Vorausgesetzt, Sie haben den Wert von nicht geändert magit-push-current-set-remote-if-missing, können Sie die Push-Fernbedienung mit konfigurieren P psome-remoteRET. Da Sie jedoch wahrscheinlich alle Feature-Zweige auf dieselbe Fernbedienung übertragen, ist es besser, die Push-Fernbedienung einmal für alle Zweige einzustellen und damit fertig zu sein: bund dann, M-pbis die richtige Fernbedienung ausgewählt ist.


Beachten Sie auch, dass es normalerweise nicht erforderlich sein sollte, den Upstream-Zweig explizit festzulegen. Wenn Sie einen neuen Zweig erstellen und einen Remote-Zweig als Ausgangspunkt auswählen, wird dieser als Upstream verwendet.

Leider ist der Ausgangspunkt normalerweise ein lokaler Zweig, und in diesem Fall verwendet Git ihn standardmäßig nicht als Upstream. Dies kann jedoch leicht behoben werden, indem Sie dies einmal ausführen:

git config --global branch.autoSetupMerge always

Der Standardwert ist true"Startpunkt als Upstream festlegen, sofern es sich um einen Remote- Zweig handelt".


Gleiches gilt übrigens für die Push-Fernbedienung. Auch das sollte normalerweise halbautomatisch in "neuen" Repositorys eingestellt werden. Wenn Sie ein Repository klonen, werden Sie gefragt, ob Sie es originals Push-Remote verwenden möchten . Sie sollten mit "Ja" antworten, es sei denn, Sie fügen beispielsweise eine weitere Fernbedienung hinzu, my-forkdie als Push-Fernbedienung verwendet werden soll. Wenn Sie eine neue Fernbedienung mit hinzufügen M aund remote.pushDefaultnoch nicht eingestellt sind, werden Sie gefragt, ob Sie die neu hinzugefügte Fernbedienung als Push-Fernbedienung verwenden möchten.

Dies kann mit magit-clone-set-remote.pushDefaultund konfiguriert werden magit-remote-add-set-remote.pushDefault.

Eine weitere erweiterte Option ist magit-branch-prefer-remote-upstreamdie Standardeinstellung nil. Wenn Sie es auf setzen tund dann einen lokalen Zweig als Startpunkt für einen neuen Zweig auswählen, wird möglicherweise der Upstream des Startpunkts (gemäß einigen Regeln, siehe doc-string) anstelle des Upstreams verwendet der Ausgangspunkt selbst.

Tarsius
quelle