Es hätte einen einfachen Weg gegeben, der Ihre neue Entwicklung von der Hauptniederlassung getrennt gehalten hätte, ohne Sie in diese unglückliche Situation zu bringen: Jede Änderung vom Stamm hätte täglich in Ihrer Entwicklungsniederlassung zusammengeführt werden müssen . (War Ihr Kunde wirklich so kurzsichtig, dass er nicht damit rechnen konnte, dass Ihre Niederlassung eines Tages wieder in die Hauptleitung zurückgeführt werden muss?)
Wie auch immer, der beste Ansatz ist meiner Meinung nach, zu wiederholen, was aus erster Hand hätte passieren sollen:
- Identifizieren Sie die Semantik der Änderungen in der Hauptzeile für Tag 1 nach der Erstellung der Verzweigung. Wenden Sie sie so gut wie möglich auf Ihre aktuelle Codebasis an. Wenn es sich um eine "lokale Änderung" handelte, sollte es einfach sein. Wenn es sich um eine "übergreifende Umgestaltung" handelte, wie das Umbenennen einer häufig verwendeten Klasse, wenden Sie diese semantisch gleichwertig auf Ihre aktuelle Codebasis an. Hoffentlich wurden in diesem Jahr keine widersprüchlichen Änderungen an der Codebasis für "Ihren" Zweig vorgenommen, da dies sonst zu einem echten Rätsel werden kann
- Testen Sie das Ergebnis (Habe ich erwähnt, dass Sie für diese Aufgabe eine gute Testsuite benötigen)? Beheben Sie alle im Test aufgedeckten Fehler
- Wiederholen Sie diesen Vorgang für die Änderungen in der Hauptzeile für Tag 2, dann für Tag 3 usw.
Dies kann funktionieren, wenn die Teams die klassischen Regeln der Versionskontrolle strikt einhalten ("Nur kompilierbare, getestete Status festschreiben" und "Früh und häufig einchecken").
Nach 365 Wiederholungen (oder 250, wenn Sie Glück haben und die Arbeit für Wochenendänderungen bündeln können) sind Sie fast fertig (fast, weil Sie die Anzahl der Änderungen hinzufügen müssen, die während des Integrationszeitraums an der Hauptleitung vorgenommen werden ). Der letzte Schritt ist das Zusammenführen des aktualisierten dev-Zweigs in den Trunk (damit Sie den Verlauf des Trunks nicht verlieren). Das sollte einfach sein, denn technisch sollte es nur ein Ersatz der betroffenen Dateien sein.
Und ja, ich meine es ernst, es gibt wahrscheinlich keine Abkürzung dazu. Es könnte sich herausstellen, dass "tägliche Portionen" manchmal zu klein sind, aber ich würde das nicht erwarten, ich denke, es ist wahrscheinlicher, dass tägliche Portionen zu groß werden. Ich hoffe, Ihr Kunde bezahlt Sie wirklich gut dafür und das ist für ihn so teuer, dass er aus seinem Scheitern lernen wird.
Ich sollte hinzufügen, dass Sie dies auch mit vertauschten Seiten versuchen können - indem Sie die Änderungen von Ihrem Zweig in kleinen Portionen wieder in die Hauptlinie integrieren. Dies ist möglicherweise einfacher, wenn in Ihrem Entwicklungszweig viel weniger Änderungen vorgenommen wurden als im Trunk, oder wenn die meisten Änderungen in neuen Quelldateien vorgenommen wurden, die derzeit nicht zum Trunk gehören. Man kann dies als "Portierung" einer Funktion von einem Produkt A (dem Dev-Zweig) zu einem etwas anderen Produkt B (dem aktuellen Status des Trunks) ansehen. Wenn die Mehrheit der übergreifenden Refactorings jedoch in der Hauptzeile durchgeführt wurde und sich auf Ihren neuen Code auswirkt (die 6500-Zusammenführungskollisionen scheinen ein Beweis dafür zu sein), ist es möglicherweise einfacher, wie ich es zuerst beschrieben habe.