Frage

Ich verwende CVS2SVN, um mein Repository zu konvertieren. Ich habe es mit Erfolg in einem Repository gemacht, und jetzt ist mein neues Problem ein zweites Repository.

In meiner neuen Konvertierung möchte ich nur den Kopf und einen Zweig umwandeln. CVS2SVN haben nur die Funktion "ausschließen" für Zweige, aber nicht "inklusive". Ich habe viele, viele Zweige und jeder von ihnen wird viel Arbeit nehmen ....

Gibt es eine Möglichkeit, nur den Kofferraum (Kopf) und nur einen Zweig umzuwandeln?

Danke, ODED

War es hilfreich?

Lösung

Wenn Sie nur den einen Zweig behalten möchten und keine Tags, dann ist das einfach. Die erste Regel, die mit einem Symbol entspricht, wird verwendet. Geben Sie daher den Zweig an, den Sie enthalten möchten, und schließen Sie dann alles andere aus:

cvs2svn --force-branch=mybranch --exclude='.*' ...

Wenn Sie nicht nur den Zweig, sondern auch so viele Tags wie möglich einfügen möchten, ist er etwas schwieriger. Sie kennen nicht nur die Namen aller Tags unbedingt unbedingt unbedingt, sondern können auch keine Tags einschließen, die von ausgeschlossenen Zweigen abhängig sind. In diesem Fall ist es am einfachsten, mit den Optionen für--write-symbol-Info- und -Symbol-Hinweise zu arbeiten:

cvs2svn --write-symbol-info=symbol-info.out --passes=1:3 ...

Dadurch wird eine Datei namens "Symbol-info.out" erstellt, die Informationen zu allen Lebenslaufsymbolen enthält. Öffnen Sie in Ihrem Editor diese Datei, suchen Sie alle Zeilen, die den Zweigen entsprechen, die Sie ausschließen möchten, und ändern Sie die dritte Spalte dieser Zeilen in das Wort "Ausschluss". Stellen Sie sicher, dass die dritte Spalte der Zeile für den Zweig, den Sie einbeziehen möchten, das Wort "Zweig" und seine vierte Spalte enthält, ist der Pfad, an dem Sie möchten, dass es enden.

Führen Sie nun CVS2SVN erneut ab, beginnend bei Pass 3 und verwenden Sie die bearbeitete Symbol-Info-Datei als Symbol-Hinweisdatei:

cvs2svn --symbol-hints=symbol-info.out --passes=3 ...

Sie erhalten viele Fehler wie:

ERROR: ExcludedSymbol('FOO_BRANCH') cannot be excluded because the following symbols depend on it:
    BAR_TAG
    BAZ_TAG

Gehen Sie nun zurück in den Editor und ändern Sie die aufgeführten Tags (bar_tag und baz_tag im Beispiel), um ebenfalls ausgeschlossen zu werden, und versuchen Sie dann erneut, Pass3 auszuführen. Dieses Verfahren muss möglicherweise einige Male iteriert werden, sollte jedoch nicht umständlich sein, da Pass3 sehr schnell läuft.

Wenn Sie Pass3 ohne Fehler erhalten haben, führen Sie den Rest der Konvertierung aus:

cvs2svn --symbol-hints=symbol-info.out --passes=4: ...

Andere Tipps

Ein Problem ist, dass CVS2SVN nicht nur bestimmen muss, ob ein Zweig einbezogen werden soll oder nicht, sondern (gleichzeitig), ob ein Symbol ein Zweig oder ein Tag ist. Wenn Sie also diesen einen Zweig und einige Tags einbeziehen möchten, ist es schwieriger, als nur "nur diese Zweigstelle einzuschließen" zu sagen - dies würde alle Tags töten.

Iow, CVS2SVN unterstützt das nicht wirklich. Sie können mit dem Quellcode arbeiten. In cvs2svn_lib.symbol_strategy.branchifcommits den Fall, in dem er Branch (Symbol) zurückgibt

   if symbol.name == 'my_branch':
       return Branch(symbol)
   else:
       return ExcludedSymbol(symbol)

IIUC, Branchifcommits sollten standardmäßig verwendet werden.

Persönlich würde ich eine andere Strategie anwenden:

 1. convert the repository once, with all branches.
 2. do a "svn ls" on branches, and redirect that into a file.
 3. edit the file to construct an exclude regex out of it, of the form `b1|b2|...|bn`

Ich würde das nicht viel Arbeit nennen ...

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