Ich schreibe eine Art neues Verwaltungs-Dashboard für unser CMS (welches auf ASP.net-Webforms läuft). Einige unserer älteren Server können nur aus verschiedenen Gründen mit .NET 2.0 umgehen. Daher müsste ich meinen Code, der Lambda-Ausdrücke usw. verwendet, neu schreiben.
Ich frage mich, wie Sie ein dvcs wie mercurial verwenden würden, um diese beiden Versionen gleichzeitig zu entwickeln.
Meine aktuelle Codebasis und das mercuriale Repository sind auf .NET 3.5 ausgerichtet. Ich bin relativ neu zu mercurial und ich denke, ich müsste die Codebasis verzweigen?
Best Practices oder Tutorials?
Ja, Sie können Mercurial dafür verwenden. Hier ist, wie es funktionieren würde.
Nehmen wir an, Ihr aktueller Klon heißt new-dot-net
seit dem
unterstützt die neue .Net-Version. Du machst einen Klon daraus und nennst es
old-dot-net
oder so ähnlich. Die zwei Klone sind jetzt identisch
und beide zielen auf .Net 3.5.
Nehmen Sie nun vorsichtig kleine Änderungen in old-dot-net
vor, um es zu machen
.Net 2.0 kompatibel. Wenn Sie die Änderungen vornehmen, werden die beiden Klone
beginne zu divergieren:
Hier haben Sie [c]
und [d]
changesets gemacht, um das .Net 2.0 hinzuzufügen
Kompatibilität. Beachten Sie, dass der old-dot-net
-Klon mehr enthält
changesets als new-dot-net
, da es die Abwärtskompatibilität hat
Änderungen, die Sie dont in new-dot-net
nicht sehen möchten. Wie du weitermachst
arbeiten, ist es wichtig, daran zu denken: net-dot-net
wird enthalten
eine Teilmenge der Changesets in old-dot-net
. Die Änderungen fließen von
new-dot-net
bis old-dot-net
, aber niemals in umgekehrter Richtung.
Nehmen wir an, Sie machen eine neue Änderung in new-dot-net
. Du machst die Änderung
in new-dot-net
und die Situation sieht jetzt so aus:
Sie möchten die Änderung nun auch in old-dot-net
zurück portieren
Ändere zu old-dot-net
und ziehe von net-dot-net
:
Dadurch wird ein neuer Kopf in old-dot-net
:
, da das [x]
Änderungsset [b]
als übergeordnetes Änderungsset hat. Du jetzt
haben mehrere Köpfe und müssen zusammenführen, um die Anzahl zu reduzieren
Köpfe. Durch das Zusammenführen erstellen Sie einen neuen Changeset, den Sie verwenden
"So soll [x]
und [d]
kombiniert werden". Wenn die [x]
changeset berührt nur Code, der nicht auch in [c]
und berührt wird
[d]
, dann sollte die Zusammenführung einfach funktionieren. Sonst wirst du präsentiert
mit einem Merge-Tool und muss den Konflikt lösen. Du begehst das
füge als chageset [e]
hinzu:
Und Sie sind fertig - Sie haben nun die [x]
Änderung in integriert
Ihr .Net 2.0 kompatibler Code.
Sie wiederholen dies jedes Mal, wenn eine Änderung in new-dot-net
stattgefunden hat.
Nehmen wir an, dass weitere Funktionen hinzugefügt werden:
Nachdem Sie sie in old-dot-net
gezogen haben, erhalten Sie
Und Sie verbinden jetzt [e]
und [z]
:
Die wichtigsten zu beachtenden Teile sind:
new-dot-net
. old-dot-net
old-dot-net
nach new-dot-net
. Sollten Sie irgendwann feststellen, dass eine Änderung in new-dot-net
nicht erfolgt
benötigt in old-dot-net
, dann müssen Sie es noch ziehen und zusammenführen
es. Aber Sie werden dann eine Dummy Merge tun. Wenn die Köpfe [w]
und sind
[g]
, und du willst [g]
behalten, dann tue
Der Trick besteht darin, die Zusammenführung durchzuführen, ohne sich um die Ergebnisse,
dann alle Änderungen rückgängig machen und die unveränderte Arbeitskopie als
verschmelzen. Auf diese Weise erzählst du der Welt, dass "die Kombination von [w]
und
[g]
ist [g]
", d. h. Sie werfen die Änderungen in [w]
weg. Neu
Änderungen in new-dot-net
nach [w]
können dann wie folgt zusammengeführt werden
normal.
Tags und Links .net asp.net mercurial version-control dvcs