Pregunta

Entonces, es al revés esta vez: necesito migrar un proyecto basado en SVN a ClearCase. ¿Existe alguna herramienta que haga el proceso un poco más fácil (en lugar de crear un script personalizado) y hay alguna trampa de alguien que haya tenido experiencia en hacer esto?

¡Gracias!

¿Fue útil?

Solución

Como se mencionó aquí (ibm) y en este hilo , no hay una herramienta directa para importar datos SVN a ClearCase.

Eso significa un script personalizado que configura su espacio de trabajo SVN en un hito relevante, y luego clearfsimport en una vista ClearCase con un " apropiado " especificación de configuración (es decir, " especificación de configuración ").

Por apropiado, me refiero a una vista de ClearCase que importa en la rama de ClearCase relevante las diferentes copias de los archivos de Subversion ubicados en 'directorios de rama'. Y luego importando en el orden correcto las 'etiquetas' (todavía copias en el repositorio SVN) en la vista de importación ClearCase, con una etiqueta establecida justo después de ese tipo de importación.

Entonces, el principal 'problema' es importar ciegamente toda la estructura SVN: eso daría como resultado directorios reales que no deberían estar presentes en absoluto en ClearCase, ya que las ramas y las etiquetas son ciudadanos de primera clase con esta herramienta, y no ' copia barata 'como en SVN.

Un buen script para comenzar (y para adaptarse, por supuesto) sería svn2git que detecta ramas y etiquetas SVN, e intenta importar el contenido de esos 'directorios' en git, (pero también podría importarlos en ClearCase, a través de la llamada correcta del sistema al comando 'clearfsimport' ').

Dado que la importación de una única revisión puede ser bastante larga, un enfoque realista sería limitar la secuencia de comandos para que solo importe:

  • etiquetas
  • CABEZA del tronco
  • CABEZA de las ramas declaradas

Al importar ramas, eso significa crear el brtype, y luego establecer una etiqueta (un punto de partida), finalmente cambiar la especificación de configuración para obtener las siguientes reglas de selección:

element * .../svnBranch
element * STARTING_LABEL -mkbranch svnBranch
element /main/0 -mkbranch svnBranch

El punto importante es tener un resultado final sin los directorios que representan la rama y la etiqueta presentes en SVN.
A partir de ahí, podrá mover / cambiar el nombre de los directorios principales a la estructura que desee, como la adecuada para la declaración del componente UCM (si desea usar UCM).

Otros consejos

Cuando use el script svn2cc, terminará con un playall.bat.

Si ejecuta el siguiente script, etiquetará entre revisiones para que sea más fácil acceder a ellas más adelante.

Quizás un poco excesivo, pero algunos pueden encontrarlo útil. No me disculpo por la calidad del código :)

# File Name ......................... revision_labeller.pl
# Written By ........................ Stuart Davidson
# Date .............................. 21/07/2009
#
# Description :
# Adds the auto-generation and application of labels to an SVN import. 
# 
# Usage : 
# revision_labeller.pl -label SVN-IMPORT-MYPROJECT -playall playall.bat


use strict;
use warnings;
use Getopt::Long;

use vars qw($label $playall_path);

GetOptions(
   'label=s'            => \$label,
   'playall=s'          => \$playall_path,
) or exit 2;

my $revisions = 0;
my $output = "";

# Count how many chout_x there are.
open(PLAY, "<$playall_path");

while(<PLAY>)
{
    if(

Cuando use el script svn2cc, terminará con un playall.bat.

Si ejecuta el siguiente script, etiquetará entre revisiones para que sea más fácil acceder a ellas más adelante.

Quizás un poco excesivo, pero algunos pueden encontrarlo útil. No me disculpo por la calidad del código :)

<*> =~ /^call chout_\d{1,3}.bat/) { $revisions++; } $output .=

Cuando use el script svn2cc, terminará con un playall.bat.

Si ejecuta el siguiente script, etiquetará entre revisiones para que sea más fácil acceder a ellas más adelante.

Quizás un poco excesivo, pero algunos pueden encontrarlo útil. No me disculpo por la calidad del código :)

<*>; } close(PLAY); # Add the ability to make labels. $output =~ s/call chin_(\d{1,3}).bat/call chin_$1.bat\ncleartool mklabel -recurse ($label)_$1 ./g; $output =~ s/\($label\)/$label/g; # For each revision, at the start, create the label my $create_labels = ""; for(my $i = 1; $i <= $revisions; $i++) { $create_labels .= "cleartool mklbtype -cfile \"comments_" . $i . ".txt\" " . $label . "_" . $i . "\n"; } $output = $create_labels . $output; # For each revision, at the end, lock the label my $lock_labels = ""; for(my $i = 1; $i <= $revisions; $i++) { $lock_labels .= "cleartool lock lbtype:" . $label . "_" . $i . "\n"; } $output = $output . $lock_labels; print $output;
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top