Pregunta

Estoy usando cvs2svn para convertir mi repositorio.Lo hice con éxito en un repositorio y ahora mi nuevo problema es un segundo repositorio.

En mi nueva conversión, quiero convertir solo el HEAD y una rama.cvs2svn sólo tiene la función "excluir" para ramas, pero no "incluir".Tengo muchas sucursales y excluir todas y cada una de ellas requerirá MUCHO trabajo...

¿Hay alguna manera de convertir sólo el tronco (HEAD) y sólo una rama?

Gracias Oded

¿Fue útil?

Solución

Si sólo desea conservar la rama y no hay etiquetas , entonces esto es fácil. Se utiliza la primera regla que coincide con un símbolo, por lo especifica la rama que desea ser incluido a continuación, excluir todo lo demás:

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

Si desea incluir no sólo la rama, sino también tantas etiquetas como sea posible, entonces es un poco más complicado. No sólo no sabe necesariamente los nombres de todas las etiquetas, pero tampoco se puede incluir etiquetas que dependen de las ramas excluidas. En este caso, es más fácil trabajar con los símbolos-info --write y --symbol-insinuaciones opciones:

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

Esto creará un archivo llamado "símbolo de la info.out" que contiene información sobre todos los símbolos de CVS. En el editor, abra este archivo, encontrar todas las líneas que corresponden a ramas que desea excluir, y cambiar la tercera columna de las líneas de la palabra "excluir". Asegúrese de que la tercera columna de la línea de la rama que desea incluir contiene la palabra "rama" y su cuarta columna es la ruta donde desea que termine.

Ahora ejecute cvs2svn de nuevo, comenzando en el paso 3, y utilizando el archivo de símbolo de la información editada como un símbolo insinúa archivo:

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

obtendrá una gran cantidad de errores como:

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

Ahora ve de nuevo en el editor y cambiar las etiquetas que figuran (BAR_TAG y BAZ_TAG en el ejemplo) para ser excluido, lo intente ejecutar pass3 nuevo. podría necesitar este procedimiento para ser iterado un par de veces, pero no debe ser engorroso debido pass3 corre muy rápido.

Cuando haya conseguido pass3 para completar sin errores, ejecutar el resto de la conversión:

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

Otros consejos

Un problema es que cvs2svn no sólo necesita determinar si incluye una rama o no, sino (simultáneamente) si un símbolo es una rama o una etiqueta en primer lugar.Entonces, si desea incluir esa rama y también algunas etiquetas, es más difícil que simplemente decir "incluir solo esa rama"; hacerlo eliminaría todas las etiquetas.

OIA, cvs2svn realmente no admite eso.Puede solucionarlo editando su código fuente.En cvs2svn_lib.symbol_strategy.BranchIfCommits, cambie el caso en el que devuelve Branch(symbol) a

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

IIUC, BranchIfCommits debe usarse de forma predeterminada.

Personalmente, usaría una estrategia diferente:

 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`

Yo no llamaría a eso MUCHO trabajo...

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top