2010-12-07 8 views

Antwort

199

Aktualisieren Sie auf den Zweig stiging und erstellen Sie einen neuen Zweig davon. Dann schließe den alten Zweig.

Zusammengefasst:

hg update stiging 
hg branch staging 
hg commit -m"Changing stiging branch to staging." 
hg update stiging 
hg commit --close-branch -m"This was a typo; use staging instead." 
hg push --new-branch 
+1

Dies ist der beste Weg, dies zu tun, dass ich gefunden habe. Das Schließen der Verzweigung verhindert, dass andere Benutzer sie versehentlich verwenden, da sie nicht in der Ausgabe von "hg branches" angezeigt wird. Sie können später immer noch darauf zugreifen, wenn Sie den Namen kennen. – Utensil

+2

Kann Mercurial den Namen eines geschlossenen Zweigs wiederverwenden? Das heißt, wenn Sie einen v3-Zweig haben, können Sie die oben genannte Technik verwenden, um ihn in v4 umzubenennen und dann einen _new_ v3-Zweig abzuzweigen, obwohl Sie eine geschlossene v3 hinterlassen haben? –

+1

Nein, Zweige sind permanent.Wenn Sie sich zu einer geschlossenen Zweigstelle verpflichten, wird Mercurial sie wieder öffnen. Wenn Sie "leichte" Zweige (wie Git) möchten, verwenden Sie stattdessen Lesezeichen. –

13

eine Niederlassung Make „Staging“ und vergessen Sie die anderen ...

+0

+1 das ist, was ich tun würde. Die alten Changesets haben immer noch den alten Branchennamen, aber die neuen haben den neuen Branchennamen. – barjak

16

Wenn Sie auf Change es haben, dann werden Sie die convert extension mit einem branchmap verwenden müssen, um es umzubenennen. Jeder muss dann das neue Repo klonen oder den alten Zweig entfernen.

+1

Dies ist eine interessante Lösung, können Sie ein wenig mehr erarbeiten? – DrM

+0

@DrM: Siehe http://mercurial.selenic.com/wiki/ConvertExtension#A--branchmap – Gili

54

Für zukünftige Leser: Mit der rebase Erweiterung, können Sie einen neuen Zweig mit den gleichen Eltern wie stiging machen und die gesamten Branche Geschichte um es zu bewegen, wie folgt aus:

hg update -r "parents(min(branch('stiging')))" 
hg branch staging 
hg commit 
hg rebase --source "min(branch('stiging'))" --dest staging 

Dies setzt voraus, dass stiging nur ein Elternteil hat. Natürlich können Sie stattdessen auch explizite Revisionsnummern verwenden.

Anmerkung 1: Wenn Zweig stiging verschmilzt mit anderen Zweigen enthält, ich denken, dass dies sie erhalten wird, solange staging und stiging die gleichen Eltern haben. Aber ich würde es auf jeden Fall nochmal überprüfen.

Hinweis 2: Da der Verlauf bearbeitet wird, verschwindet der alte Zweig nicht einfach aus den geklonten Repositories (siehe Dokumentation rebase). Wenn nicht jeder neu klonen kann, ist es für eine große Gruppe möglicherweise keine sehr praktische Lösung.

Note3/Edit (mit freundlicher Genehmigung von @JasonRCoombs): Nun, da phases in Quecksilber-Standard sind, rebase wird sich weigern, Differenzmengen zu ändern, die bereits gedrückt wurden. Entweder täuschen Sie es, indem Sie die Phase zurück in Entwurf ändern (mit hg phases), oder lassen Sie den alten Zweig dort bleiben, wo er ist, und erstellen Sie einfach eine korrekt benannte Kopie (z. B. mit `hg rebase --keep ').

+0

+1 für kleine Teams, in denen Sie die Benutzer zum Klonen zwingen können. Dies ist eine gute Idee - oder verwenden Sie stattdessen' hg convert'. – hochl

+5

Bei späten Versionen von Mercurial schlägt der Rebase-Befehl mit "kann unveränderbares Änderungsset nicht umbasieren" fehl, wenn die zu verschiebenden Änderungen "öffentlich" sind. Entweder erzwingen Sie einen Entwurf (mit hg-Phasen) oder übergeben Sie "--keep" an den Befehl rebase, der die Änderungen kopiert, anstatt sie zu verschieben. –

+0

In Schritt 4: 'abbrechen: unveränderlicher Änderungssatz 11b1e2b7dc4f kann nicht erneut erstellt werden. Beachten Sie, dass ich Changesets von einem anderen Zweig in diesen verpflanzt habe. Abgesehen davon ist es geteilt und frei zusammengeführt. –

2

Dies ändert die Historie und ist nur für fortgeschrittene Mercurial-Benutzer. Tun Sie das nicht, wenn Sie nicht wissen, was das bedeutet.

Wenn Stiging nur lokal ist, können Sie es mit einer Kombination aus graft und strip in Staging ändern. Beginnen Sie mit der Aktualisierung auf die Vorgänger-Änderungsmenge, bei der die Stigration divergiert ist. Erstellen Sie den Staging-Zweig, und übertragen Sie jedes Commit von Stiging auf Staging. Staging sollte jetzt eine Kopie von Stiging sein. Schließlich, zerstören Stiging durch Strippen seine erste Commit.

hg update {SHA-1 of the ancestor changeset} 
hg branch staging 
hg graft {first changeset in stiging} ... {stiging head-1} {stiging head} 
hg strip {first changeset in stiging} 
hg push --new-branch