Versionskontrollpraxis für Rewrites

29

Wir haben ein Produkt (Prototyp) P_OLD in der Sprache X entwickelt und schreiben es jetzt von Grund auf neu als P_NEW in der Sprache Y.

Da P_NEW und P_OLD dasselbe Produkt sind:

Sollte P_NEW nur ​​ein Brach von P_OLD sein oder sollte es ein eigenes Repository sein?

Was ist der übliche Weg, um mit so großen Änderungen aus einer Versionskontrollperspektive umzugehen?

1v0
quelle
@gnat Danke für den Link. Es ist interessant, aber der Hauptunterschied ist, dass es für uns dasselbe Produkt ist, nur komplett neu gestaltet. Das alte Projekt war im Grunde ein (hässlicher) Prototyp.
0,

Antworten:

46

Sie möchten mit ziemlicher Sicherheit ein neues Repository.

Der Zweck des Repository ist:

  • Verfolgen Sie den Verlauf und die Änderungen, damit Sie sie leicht vergleichen können
  • Verwalten von Zweigen und Zusammenführungen, anstatt nur Patch-Dateien per E-Mail zu versenden und sie manuell auf Arbeitsverzeichnisse anzuwenden

Wenn Sie ein Projekt von Grund auf neu schreiben, macht es keinen Sinn, das Neuschreiben im selben Repository abzulegen. Sie können keine Patches, die in der alten Sprache geschrieben wurden, auf Ihr Neuschreiben anwenden. Das Wechseln von Repos lässt die Geschichte des alten Repos nicht verschwinden, und wenn Sie wechseln, werden Sie keine seltsamen Zwischenstufen haben, in denen zwei Sprachen in Ihrem Repo herumlaufen.

Der einzige Grund, warum ich in Betracht ziehen würde, das Repository beim Ändern der Sprache zu behalten, wäre, wenn a) die Sprachen so ähnlich sind, dass Code oft ohne Änderungen von einem zum anderen kopiert werden kann, oder b) Sie ein Projekt haben, in dem Der Großteil des Funktionsinhalts in der Versionskontrolle besteht aus Vorlagen in einer Templatensprache, die Sie beibehalten, und die Sprache des Kerns, den Sie ändern, wird Zeile für Zeile in eine andere Sprache übersetzt (und selbst dann nur, wenn Sie dies wissen Sie müssen die Vorlagen während der Migration weiter iterieren.

user52889
quelle
2
Abhängig von der Länge des Übergangs ist es nützlich, den vorherigen lebendig und für Vergleiche leicht zugänglich zu haben. Möglicherweise führen Sie sogar Testfälle im alten System ein, um zu überprüfen, ob die Ergebnisse im neuen System übereinstimmen.
Eric
16

Ich schreibe immer selbst in neue Repositories. Auf diese Weise können Builds, Tests und Bereitstellungen unabhängig voneinander durchgeführt werden.

Wenn Sie ein Projekt in einer anderen Sprache umschreiben, gibt es bei all diesen Aufgaben wie dem Erstellen, Ausführen von Tests und Bereitstellen häufig nur sehr geringe Ähnlichkeiten. Sie ersparen sich Schmerzen, wenn Sie sie nur in ihrem eigenen Repository isolieren. Dann müssen Sie sich nur noch Gedanken darüber machen, wie Sie den Benutzer- und Datenübergang vom alten zum neuen System verwalten. Das ist immer eine lustige Sache. :)

dsw88
quelle
5

Wenn Ihre Systeme ausreichend modular und Link-kompatibel sind, würden Sie von einem einzigen Repository und Build profitieren. Wenn beispielsweise ein C-System in C ++ umgeschrieben wird, kann der C ++ - Code vorhandene Funktionen aufrufen und diese schrittweise ersetzen.

Aber auch in diesem Fall könnten einige argumentieren, ein neues Repo zu starten, in das der relevante alte Code nach Bedarf eingezogen wird.

Keith
quelle