2010-11-30 10 views
8

Ich habe dieses Dokument gelesen: A Guide to Branching with Mercurial, speziell der Abschnitt Branching with Bookmarks.Mercurial, "Verzweigung mit Lesezeichen"

Dort heißt es:

Jetzt haben Sie zwei Lesezeichen haben (im Wesentlichen ein Tag) für Ihre beiden Zweige an der aktuellen changeset.

Um zu einem dieser Zweige zu wechseln, können Sie hg update feature verwenden, um auf den Tipp-Änderungssatz dieses Zweiges zu aktualisieren und sich selbst als an diesem Zweig arbeiten zu markieren. Wenn Sie das Commit ausführen, wird das Lesezeichen in das neu erstellte Änderungsset verschoben.

Ich habe das versucht, aber es endete beide Lesezeichen gleichzeitig zu bewegen.

Ist diese Anleitung falsch, veraltet oder habe ich etwas falsch gemacht? Beachten Sie, dass ich weiß, dass Lesezeichen in separaten Zweigen nur das Lesezeichen für den Zweig verschieben, an dem ich gerade arbeite, aber dieses Handbuch (das viele Leute sagen, ist die definitive Anleitung dazu) sagt ausdrücklich den obigen Text, der anzeigt dass es funktioniert haben sollte, indem ich "Mercurial" gesagt habe, an welchem ​​Lesezeichen (Zweig) ich gerade arbeite.

Testen zeigt sonst, obwohl.

Irgendwelche Ideen?

Beispiel:

 
> hg init 
> echo 1 >test.txt 
> hg commit -m "initial" --addremove 
adding test.txt 

> hg bookmark main 
> hg bookmark feature 
> hg log 
changeset: 0:c56ceb49ee20 
tag:   feature 
tag:   main 
tag:   tip 
user:  Lasse V. Karlsen <[email protected]> 
date:  Tue Nov 30 23:06:16 2010 +0100 
summary:  initial 

> hg update feature 
0 files updated, 0 files merged, 0 files removed, 0 files unresolved 

> echo 2 >test2.txt 
> hg commit -m "feature 1" --addremove 
adding test2.txt 

> hg log 
changeset: 1:9f2f5869b57b 
tag:   feature        <---- both were moved 
tag:   main        <---- 
tag:   tip 
user:  Lasse V. Karlsen <[email protected]> 
date:  Tue Nov 30 23:06:45 2010 +0100 
summary:  feature 1 

changeset: 0:c56ceb49ee20 
user:  Lasse V. Karlsen <[email protected]> 
date:  Tue Nov 30 23:06:16 2010 +0100 
summary:  initial

Antwort

16

Wenn ich habe Recht, Sie, Sie wollen nur das Lesezeichen, das Sie aktualisiert haben auf die nächste verpflichten sich zu bewegen. Zu diesem Zweck hat die Lesezeichen-Erweiterung die Option track.current.

Von BookmarksExtension:

standardmäßig, wenn mehrere Lesezeichen auf den gleichen changeset zeigen, werden sie alle bewegen sich gemeinsam vorwärts. Es ist möglich, eine Git-ähnliche Erfahrung zu erhalten, indem Sie die folgende Konfigurationsoption zu Ihrer hinzufügen.hgrc

[bookmarks] 
track.current = True 

In Ihrem Beispiel würde dies hält die Haupt Lesezeichen bei Revision 0.

Wenn die track.current Option aktiviert ist, wird die aktuell aktiven Lesezeichen werden in der Ausgabe mit einem Sterne kommentiert von hg bookmarks.

UPDATE: Da Mercurial 1.8 das Standardverhalten wird nur das aktuelle Lesezeichen zu verschieben, das heißt, die oben erwähnte Option nicht mehr benötigt [1].

+0

Vielleicht war das das Standardverhalten an einem bestimmten Punkt und wurde geändert? Wie auch immer, du hast recht, mit dieser Konfiguration verhält es sich genau so, wie es die Anleitung darstellt. Vielen Dank! –

+0

Nein, die Option 'track.current' wurde immer auf 'False' gesetzt. Es gab kürzlich Diskussionen darüber, den Bookmark-Befehl zu einem Core-Befehl zu machen, und in Bezug darauf wurde vorgeschlagen, dass 'track.current' mit dem Standardwert True beginnen sollte. –

+3

+1 für die hilfreiche Antwort, aber es führt zu einer offensichtlichen Frage: Wann ist track.current * nicht * geeignet? Ich kann mir keine Situation vorstellen, in der ich mehrere Lesezeichen habe, und ich möchte, dass sie * alle * nach einem Commit vorankommen. –

3

Wenn Sie die Beschreibung des BookmarksExtension lesen, heißt es:

Lesezeichen Verweise auf Commits sind, die automatisch aktualisiert werden, wenn neue Commits gemacht werden.

und:

Da Lesezeichen automatisch aktualisiert werden, wenn sie auf die changeset commiting sie weisen, sind sie besonders nützlich, den Überblick über verschiedene Köpfe zu halten.

In Ihrem Fall hatten Sie zu dem Zeitpunkt, an dem Sie beide Lesezeichen erstellt haben, nur einen Kopf im Repository. Wenn Sie eine Sequenz wie die folgenden verwenden, sollte es wie erwartet:

hg init foo 
# edit, edit, edit 
hg commit -A -m "root" 
hg bookmark main 
# edit, edit, edit ... 
hg commit -m "main 1" 
hg update 0 
# edit, edit edit 
hg bookmark feature 
hg commit -m "feature 1" 
+1

Also im Grunde sagen Sie, dass der Leitfaden falsch ist? Das ist meine Frage. Ich weiß, dass einzelne Lesezeichen, wie Ihr Beispiel, wie erwartet funktionieren. Aber diese Anleitung scheint zu sagen, dass, wenn Sie 'hg update feature' ausführen, nur dieses Lesezeichen erweitert wird. –

+0

@Lasse: Nein, ich denke, dass das Dokument der Kürze halber einige Details weglässt; Der Autor sagt, mehr über Lesezeichen zu lesen, bevor Sie sie verwenden. –

+1

Ich nehme an, der Autor des Handbuchs (stillschweigend) hat angenommen, dass die Option * track.current * der Lesezeichenerweiterung aktiviert ist (siehe meine zugehörige Antwort). –

Verwandte Themen