213 Stimmen

Mercurial: Kann ich einen Zweig umbenennen?

Wir haben jetzt einen "Stiging"-Zweig, wobei "Staging" semantisch viel besser passt. Was ist eine gute Strategie für den Umgang mit dieser Situation?

229voto

Elliot Cameron Punkte 5057

Aktualisierung der stiging Zweig und erstellen Sie einen neuen Zweig davon ab. Schließen Sie dann 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

63voto

alexis Punkte 46051

Für zukünftige Leser: Mit dem rebase Erweiterung können Sie einen neuen Zweig mit demselben Elternteil wie stiging und verschieben Sie den gesamten Zweigverlauf dorthin:

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 hat nur ein Elternteil. Natürlich können Sie stattdessen auch einfach explizite Revisionsnummern verwenden.

Anmerkung 1: Wenn die Abzweigung stiging umfasst Zusammenführungen mit anderen Zweigen, I denken dass sie dadurch erhalten werden, solange staging y stiging denselben Elternteil haben. Aber ich würde das auf jeden Fall noch einmal überprüfen.

Hinweis 2: Da dies die Historie bearbeitet, wird der alte Zweig nicht einfach aus geklonten Repositories verschwinden (siehe die rebase Dokumentation). Wenn nicht jeder neu klonen kann, ist das für eine große Gruppe vielleicht keine sehr praktische Lösung.

Note3/Edit (mit freundlicher Genehmigung von @JasonRCoombs): Nun, da Phasen sind in Mercurial Standard, rebase verweigert die Änderung von Changesets, die bereits gepusht wurden. Entweder Sie täuschen es, indem Sie die Phase wieder auf Entwurf zurücksetzen (mit hg phases ), oder lassen Sie den alten Zweig bleiben, wo er ist, und erstellen Sie einfach eine richtig benannte Kopie (z.B. mit `hg rebase --keep').

16voto

lctr30 Punkte 516

Legen Sie einen neuen Zweig namens "staging" an und vergessen Sie die anderen...

16voto

tghw Punkte 24707

Wenn Sie Changesets darauf haben, müssen Sie die Erweiterung umwandeln mit einer Branchmap, um sie umzubenennen. Jeder muss dann das neue Repo klonen oder den alten Zweig entfernen.

9voto

AWrightIV Punkte 533

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

Wenn stiging nur lokal ist, können Sie es in staging ändern mit einer Kombination aus Pfropfung y Streifen . Beginnen Sie mit der Aktualisierung auf den Vorgänger-Änderungssatz, von dem stiging abgewichen ist. Erstellen Sie den Staging-Zweig und übertragen Sie jede Übertragung von stiging auf staging. Staging sollte nun eine Kopie von stiging sein. Zuletzt zerstören Sie stiging, indem Sie seine erste Übertragung entfernen.

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

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X