Frage

Ich möchte ein CVS-Projekt zu Subversion konvertieren, mit cvs2svn. Es hat einen Hauptstamm (HEAD), mit mehreren temporären Entwicklungs Ästen vom Stamm erstellt.

Bevor wir es konvertieren, werden wir die neuesten Änderungen aus dem Stamm in alle der Entwickler Zweige zusammenführen. Aber sie werden auch Änderungen, die verschmolzen wurden nicht wieder in den Stamm noch.

Als ich das Projekt SVN konvertieren, wird es keine der Merge-Historie Eigenschaften haben. Also, wie kann ich diese Eigenschaften zu initialisieren, so kann ich später fusionieren zu und von den Zweigen?

Mit anderen Worten, nach der Umwandlung, gibt es eine Reihe von Unterschieden zwischen dem Stamm und einem bestimmten Zweig sein. Das nächste Mal, wenn ich aus dem Stamm in den Zweig zusammenführen, ich will nicht, diese Unterschiede als Änderungen sehen, die zusammengeführt werden müssen. Aber wenn ich aus dem Zweig in die Stamm zusammenführen, das tue ich. Ist das möglich?

UPDATE : Ich nahm mhagger Vorschlag und sagte SVN, dass die Zweige hatten alle Änderungen bereits in dem Stamm zusammengeführt:

svn co [branch URL] .
svn merge --record-only [trunk URL]
svn commit -m ''

Das funktioniert, so dass das nächste Mal, wenn ich versuche, aus dem Stamm in einen Zweig zu verschmelzen, zeigt es keine neue Änderungen.

Aber ich habe immer noch ein Problem mit --reintegrate verschmilzt, aus dem Zweig auf den Stamm zurück. Es endet eine Menge von „R“ eplaced Dateien zeigt, was bedeutet, dass der Stamm eine Datei X hat, und der Zweig hat eine Datei X, aber sie sind nicht die gleiche Datei betrachtet. Dies macht die merge Art chaotisch, obwohl es mit den richtigen Ergebnissen zu Ende scheint.

Ich denke, dies wegen der folgenden Sequenz von Ereignissen geschieht:

  • Zweig erstellt wurde (in CVS)
  • Es wurde eine Datei X an der Stamm (in CVS)
  • hinzugefügt
  • X wurde in den Zweig verschmolzen (auch in CVS)
  • Projekt wurde auf Subversion umgewandelt
  • Subversion wusste nicht, dass Zweig / X vom Stamm / X kopiert wurde. So dass es denkt, es ist ein Ersatz.

Die SVN Geschichte sieht in etwa wie folgt aus:

r100: create branch (copied from trunk)
r200: add trunk/X
r300: add branch/X (because of a CVS merge, but it's not a SVN copy)

Also, gibt es eine Möglichkeit für mich Subversion zu sagen, die Dateien zu ignorieren geschlecht, wenn dabei eine --reintegrate merge? Oder eine bessere Möglichkeit, diese Dateien zu konvertieren?

War es hilfreich?

Lösung 2

OK, ich glaube, ich habe eine Lösung für das Problem --reintegrate oben, falls jemand interessiert.

Nach diesem Dokument , wenn ich Hat die neueste Version des Rumpfes in den Zweig verschmolzen, ist eine --reintegrate tut im wesentlichen der gleiche wie diese an den Stamm zu tun:

svn merge [trunk URL] [branch URL]

Aber diese Syntax ermöglicht --ignore-Vorfahren, die --reintegrate nicht. So kann ich tun:

svn merge --ignore-ancestry [trunk URL] [branch URL]

Das zeigt mir die gleichen Ergebnisse wie ein --reintegrate, ohne all die „R“ eplaced Dateien. Der einzige andere Unterschied scheint die mergeinfo Eigenschaften zu sein. Ich bin mir nicht sicher, ob diese korrekt sind, so ist es wahrscheinlich am besten, den Zweig danach zu löschen, wie würden Sie nach einer --reintegrate.

Andere Tipps

Wie Sie wahrscheinlich wissen, cvs2svn generiert keine merge Metadaten, mit Ausnahme der impliziten Informationen darüber, wo Zweige sprossen aus. (Es kann nicht, weil CVS derartige Information nicht aufgezeichnet.) Also, nach der Konvertierung werden Sie explizit Subversion über verschmilzt sagen müssen, die unter CVS durchgeführt wurden.

Der einfachste Weg, dies zu tun ist durch die Verwendung von "svn merge --record-only ...", wie in das Subversion Buch .

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top