Wie würdest du einen DVCS (mercurial in meinem Fall) für verschiedene Versionen des .NET Frameworks entwickeln?

8

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?

    
kitsune 28.05.2009, 07:52
quelle

1 Antwort

13

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:

%Vor%

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:

%Vor%

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 :

%Vor%

Dadurch wird ein neuer Kopf in old-dot-net :

erstellt %Vor%

, 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:

%Vor%

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:

%Vor%

Nachdem Sie sie in old-dot-net gezogen haben, erhalten Sie

%Vor%

Und Sie verbinden jetzt [e] und [z] :

%Vor%

Die wichtigsten zu beachtenden Teile sind:

  • Machen Sie neue Funktionen in new-dot-net .
  • Änderungen in old-dot-net
  • niemals von old-dot-net nach new-dot-net .
  • drücken

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

%Vor%

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.

    
Martin Geisler 28.05.2009, 08:52
quelle