Merkurzweige mit unterschiedlicher Codebasis [geschlossen]

Ich habe Mühe, eine gute Methode für den Umgang mit meinem Arbeitsablauf mit Mercurial zu finden. Ich habe viele verwandte Fragen hier über SO und andere Orte gelesen, konnte aber keine vernünftige Lösung finden.

Angenommen, ich habe zwei Zweige:

Der Standardzweig, in dem ich mich normal entwickle. Bereitstellen von Releases von und Markieren mit Release-Tagseine Filiale für einen bestimmten Kunden, die separat gepflegt wird. Es wird auf einer separaten Versionsnummer ausgeführt, die von einer älteren Version der Anwendung verzweigt ist.

Diese beiden Zweige sind jetzt größtenteils identisch, es gibt jedoch bereits einige Unterschiede. Mit der Zeit werden sie mehr auseinander driften.

Das bedeutet, dass ich 4 Arten von Quelldateien habe:

Tippe A: Dateien, die in beiden Zweigen identisch bleiben (Änderungen, falls eingeführt, sollten in beiden vorhanden sein). Dies sind die meisten Dateien.Typ B: Dateien, die sich nur im Standardzweig befinden und nicht mit dem Kundenzweig zusammengeführt werden müssenTyp C: Dateien, die sich nur in der Kundenverzweigung befinden und nicht in der Standardverzweigung zusammengeführt werden müssenTyp D: Dateien, die in beiden Zweigen vorhanden sind, haben gemeinsam genutzten Code, enthalten jedoch auch Code, der für jeden Zweig separat und spezifisch bleiben sollte

Die Entwicklung wurde für den Standardzweig durchgeführt, und es gibt regelmäßige Releases, die zumeist inkrementell sind. Aber ich habe auch diese beiden Szenarien:

Einige Änderungen, die an der Standardverzweigung vorgenommen wurden, müssen ebenfalls mit der Kundenverzweigung zusammengeführt werden (z. B. ein Fehler oder eine Funktion, die in beiden Fällen behoben / hinzugefügt werden muss).Ein "Hotfix" für den Kundenzweig, der nicht sofort mit dem Standardzweig zusammengeführt werden kann, sondern irgendwann zusammengeführt werden muss.

Das Problem ist, dass ich keinen einigermaßen einfachen, sauberen und sicheren Weg finden kann, um diese beiden Szenarien zu unterstützen. Mercurial kennt weder das Konzept des teilweisen Zusammenführens noch des Ignorierens von Dateien beim Zusammenführen. Es führt Änderungssätze zusammen, besteht jedoch darauf, die Dateien einzuschließen, die in früheren Überarbeitungen eingeführt wurden.

Durch das Zusammenführen von Standard in Kundenzweig oder Kunden in Standard in diesen Szenarien werde ich gezwungen, Dateien vom Typ B und Typ C hinzuzufügen. Eine Änderung an einer Datei des Typs A, die nicht zum anderen Zweig hinzugefügt werden muss (Typ D), ist eine Herausforderung.

Jetzt kann ich natürlich einige dieser Probleme umgehen, indem ich Compiler-Definitionen verwende (wodurch die Quelldateien in beiden Zweigen gleich bleiben), Code manuell bearbeite und Dateien nach dem Zusammenführen manuell entferne, aber dies scheint nicht die effizienteste und sauberste Art zu sein diese.

Sicherlich ist dies ein genug gemeinsamer Arbeitsablauf, den klügere Leute als ich bereits herausgefunden haben. Kann jemand eine Methode oder Best Practices vorschlagen, die die Arbeit in diesen Szenarien rationalisieren können? Oder hat mein Setup einen grundlegenden Fehler?

Behandelt Git diese Abläufe auch eleganter?

Vielen Dank.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage