Wie kann man den Effekt einer Verschmelzung auf polarisierte Zweige umkehren, ohne an Qualen zu sterben?
Dieses Problem plagt mich seit Monaten und ich habe endlich aufgegeben.
Sie haben 1 Repository mit 2 benannten Zweigen. A und B.
Änderungen an A treten zwangsläufig bei B auf.
Änderungen, die direkt auf B auftreten, dürfen NIEMALS auf A erfolgen.
In einer solchen Konfiguration führt das Zusammenführen von "B" mit "A" zu einem schwerwiegenden Problem im Repository, da alle Änderungen an B in A so angezeigt werden, als wären sie in A vorgenommen worden.
Der einzige "normale" Weg, um sich von dieser Situation zu erholen, scheint darin zu bestehen, die Zusammenführung "zurückzuziehen", dh:
hg up -r A
hg backout -r BadMergeRev --parent BadMergerevBeforeOnA
Das sieht alles gut und gut aus, bis Sie sich entscheiden, später in die richtige Richtung zu verschmelzen, und am Ende alle möglichen bösen Dinge passieren und Code, der in einem bestimmten Zweig B gelöscht / auskommentiert wurde, plötzlich nicht mehr gelöscht oder nicht mehr kommentiert wird.
Bisher gab es keine praktikable Lösung für dieses Problem, außer "Lassen Sie es sein Ding machen und dann alle Probleme von Hand beheben", und das ist, um ehrlich zu sein, ein bisschen fubar.
Hier ist ein Bild, das das Problem verdeutlicht:
[Originalbild verloren]
Die Dateien C & E (oder Änderungen C & E) dürfen nur in Zweig b und nicht in Zweig a angezeigt werden. Revision A9 hier (Zweig a, Revno 9) ist der Beginn des Problems.
Die Revisionen A10 und A11 sind die Phasen "Backout Merge" und "Merge the Backout".
Und Revision B12 ist quecksilberhaltig und löscht fälschlicherweise wiederholt eine Änderung, die nicht gelöscht werden sollte.
Dieses Dilemma hat viel Frust und blauen Rauch verursacht und ich möchte dem ein Ende setzen.
Hinweis
Es kann die offensichtliche Antwort zu versuchen , die umgekehrte merge Verbot auftritt, entweder mit Haken oder mit Politik, ich habe die Fähigkeit hat dieses bis mucken ist ziemlich hoch und die Chance, es passiert so wahrscheinlich , dass auch mit Gegenmaßnahmen, Sie müssen noch Nehmen Sie an, dass dies unweigerlich passieren wird , damit Sie es lösen können, wenn dies der Fall ist.
Ausarbeiten
Im Modell habe ich separate Dateien verwendet. Dadurch klingt das Problem einfach. Diese stellen lediglich willkürliche Änderungen dar, die eine separate Zeile sein können.
Um die Verletzung zusätzlich zu beleidigen, gab es in Zweig A wesentliche Änderungen, die das ständige Problem hinterlassen. "Machen Sie die Änderungen in Zweig A zu einem Konflikt mit den Änderungen in Zweig B, die gerade aufgetaucht sind (und zurückgesetzt wurden), was wie eine Änderung aussieht stattdessen auf Zweig A "
Über Tricks zum Umschreiben der Geschichte:
Das Problem bei all diesen rückwirkenden Lösungen ist wie folgt:
- Wir haben 9000 Commits.
- Das frische Klonen dauert somit eine halbe Stunde
- Wenn es irgendwo nur einen fehlerhaften Klon des Repositorys gibt, ist es wahrscheinlich, dass er wieder mit dem ursprünglichen Repository in Kontakt kommt und ihn erneut aufschlägt.
- Jeder hat dieses Repository bereits geklont, und jetzt sind mehrere Tage mit laufenden Commits vergangen.
- Ein solcher Klon ist zufällig eine Live-Site, also "diesen löschen und von vorne anfangen" = "big nono"
(Ich gebe zu, viele der oben genannten sind etwas dumm, aber sie liegen außerhalb meiner Kontrolle).
Die einzigen Lösungen, die realisierbar sind, sind diejenigen, die davon ausgehen, dass Menschen alles falsch machen können und werden und dass es einen Weg gibt, diese Ungerechtigkeit rückgängig zu machen.