Wir haben jetzt einen "stiging" Zweig, wo "Staging" eine viel bessere semantische Anpassung zu sein scheint. Was ist eine gute Strategie dafür?Mercurial: Kann ich einen Zweig umbenennen?
Antwort
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
eine Niederlassung Make „Staging“ und vergessen Sie die anderen ...
+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
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.
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 ').
+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
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. –
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. –
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
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
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? –
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. –