web-dev-qa-db-ger.com

Wie schließe ich einen Feature-Zweig in Mercurial richtig?

Ich habe die Arbeit an einem Feature-Zweig beendet feature-x. Ich möchte die Ergebnisse in den Zweig default zurückführen und feature-x Schließen, um sie in der Ausgabe von hg branches Loszuwerden.

Ich habe folgendes Szenario entwickelt, aber es gibt einige Probleme:

$ hg up default
$ hg merge feature-x
$ hg ci -m merge
$ hg up feature-x
$ hg ci -m 'Closed branch feature-x' --close-branch

Der Zweig feature-x (Ändert 40 - 41) Ist also geschlossen, aber es gibt einen neuen Kopf, der schließende Zweig ändert 44, Die jedes Mal in hg heads Aufgeführt wird:

$ hg log ...
o  44 Closed branch feature-x
|
| @  43 merge
|/|
| o  42 Changeset C
| |
o |  41 Changeset 2
| |
o |  40 Changeset 1
|/
o  39 Changeset B
|
o  38 Changeset A
|

Update : Es scheint, dass Mercurial in der Ausgabe von hg heads Seit Version 1.5 keine Köpfe von geschlossenen Zweigen mehr anzeigt.

Ist es möglich, einen zusammengeführten Zweig zu schließen, ohne einen weiteren Kopf zu hinterlassen? Gibt es eine korrektere Möglichkeit, einen Feature-Zweig zu schließen?

Verwandte Fragen:

237

Eine Möglichkeit besteht darin, zusammengeführte Feature-Zweige offen (und inaktiv) zu lassen:

$ hg up default
$ hg merge feature-x
$ hg ci -m merge

$ hg heads
    (1 head)

$ hg branches
default    43:...
feature-x  41:...
    (2 branches)

$ hg branches -a
default    43:...
    (1 branch)

Eine andere Möglichkeit besteht darin, einen Feature-Zweig vor dem Zusammenführen mit einem zusätzlichen Commit zu schließen:

$ hg up feature-x
$ hg ci -m 'Closed branch feature-x' --close-branch
$ hg up default
$ hg merge feature-x
$ hg ci -m merge

$ hg heads
    (1 head)

$ hg branches
default    43:...
    (1 branch)

Der erste ist einfacher, lässt aber einen offenen Zweig. Der zweite lässt keine offenen Köpfe/Zweige, erfordert jedoch einen zusätzlichen Commit. Man kann das letzte tatsächliche Commit für den Feature-Zweig mit diesem zusätzlichen Commit unter Verwendung von --close-branch Kombinieren, aber man sollte im Voraus wissen, welches Commit das letzte sein wird.

Update : Seit Mercurial 1.5 können Sie den Zweig jederzeit schließen, sodass er nicht sowohl in hg branches Als auch in hg heads Angezeigt wird. ] nicht mehr. Das einzige, was Sie möglicherweise ärgern könnte, ist, dass das Revisionsdiagramm technisch gesehen noch eine weitere Revision ohne Kinder enthält.

Update 2 : Seit Mercurial 1.8 sind Lesezeichen ein Kernmerkmal von Mercurial geworden. Lesezeichen eignen sich besser zum Verzweigen als benannte Zweige. Siehe auch diese Frage:

217

imho gibt es zwei Fälle für Filialen, die vergessen wurden, zu schließen

Fall 1: Zweig wurde nicht in Standard zusammengeführt

in diesem Fall aktualisiere ich den Zweig und führe ein weiteres Commit mit --close-branch durch. Leider wird der Zweig zum neuen Tipp, und bevor ich ihn an andere Klone weitergebe, stelle ich sicher, dass der echte Tipp einige weitere Änderungen und andere erhält Sei nicht verwirrt über diesen seltsamen Tipp.

hg up myBranch
hg commit --close-branch

Fall 2: Zweig wurde in Standard zusammengeführt

Dieser Fall unterscheidet sich nicht wesentlich von Fall 1 und kann gelöst werden, indem die Schritte für Fall 1 und zwei weitere Schritte reproduziert werden.

in diesem Fall aktualisiere ich das Änderungsset für Zweige, führe ein weiteres Commit mit --close-branch durch und füge das neue Änderungsset, das zum Standard-Tipp wurde, zusammen. Die letzte Operation erstellt einen neuen Tipp, der sich im Standardzweig befindet - HOORAY!

hg up myBranch
hg commit --close-branch
hg up default
hg merge myBranch

Hoffe das hilft zukünftigen Lesern.

79
Nachbars Lumpi

EDIT autsch, zu spät ... Ich weiß, Ihr Kommentar lesen die besagt, dass Sie das Feature-x changeset um behalten wollen, so dass hier das Klonen Ansatz doesn‘ nicht funktionieren.

Ich werde immer noch die Antwort hier lassen, denn es kann anderen helfen.

Wenn Sie "Feature X" vollständig entfernen möchten, weil es beispielsweise nicht funktioniert hat, können Sie klonen. Dies ist eine der im Artikel erläuterten Methoden, die funktioniert und sich speziell mit Köpfen befasst.

Soweit ich weiß, haben Sie dies und möchten den "feature-x" -Kopf ein für alle Mal loswerden:

@    changeset:   7:00a7f69c8335
|\   tag:         tip
| |  parent:      4:31b6f976956b
| |  parent:      2:0a834fa43688
| |  summary:     merge
| |
| | o  changeset:   5:013a3e954cfd
| |/   summary:     Closed branch feature-x
| |
| o  changeset:   4:31b6f976956b
| |  summary:     Changeset2
| |
| o  changeset:   3:5cb34be9e777
| |  parent:      1:1cc843e7f4b5
| |  summary:     Changeset 1
| |
o |  changeset:   2:0a834fa43688
|/   summary:     Changeset C
|
o  changeset:   1:1cc843e7f4b5
|  summary:     Changeset B
|
o  changeset:   0:a9afb25eaede
   summary:     Changeset A

Also machst du das:

hg clone . ../cleanedrepo --rev 7

Und Sie werden Folgendes haben, und Sie werden sehen, dass feature-x in der Tat weg ist:

@    changeset:   5:00a7f69c8335
|\   tag:         tip
| |  parent:      4:31b6f976956b
| |  parent:      2:0a834fa43688
| |  summary:     merge
| |
| o  changeset:   4:31b6f976956b
| |  summary:     Changeset2
| |
| o  changeset:   3:5cb34be9e777
| |  parent:      1:1cc843e7f4b5
| |  summary:     Changeset 1
| |
o |  changeset:   2:0a834fa43688
|/   summary:     Changeset C
|
o  changeset:   1:1cc843e7f4b5
|  summary:     Changeset B
|
o  changeset:   0:a9afb25eaede
   summary:     Changeset A

Ich habe vielleicht falsch verstanden, was Sie wollten, aber bitte nicht modifizieren, ich habe mir Zeit genommen, Ihren Anwendungsfall zu reproduzieren:)

11
SyntaxT3rr0r

Es ist seltsam, dass noch niemand die robusteste Methode zum Schließen von Feature-Zweigen vorgeschlagen hat ... Sie können einfach kombinieren commit mit --close-branch-Flag zusammenführen (dh geänderte Dateien festschreiben und den Zweig schließen) gleichzeitig):

hg up feature-x
hg merge default
hg ci -m "Merge feature-x and close branch" --close-branch
hg branch default -f

Das ist alles. Niemand mehr auf Revgraph. Kein zusätzliches Commit.

7
tav