Переход от SVN к ClearCase - PullRequest
       35

Переход от SVN к ClearCase

2 голосов
/ 23 июня 2009

Итак, в этот раз все наоборот - мне нужно перенести проект на основе SVN в ClearCase. Существуют ли какие-либо инструменты, которые могли бы немного облегчить процесс (вместо того, чтобы составлять собственный сценарий), и есть ли какие-либо ошибки от тех, кто имел опыт в этом?

Спасибо!

Ответы [ 2 ]

5 голосов
/ 23 июня 2009

Как уже упоминалось здесь (ibm) и в этой теме , прямого инструмента для импорта данных SVN в ClearCase не существует.

Это означает, что пользовательский сценарий устанавливает рабочее пространство SVN на соответствующий этап, а затем clearfsimport в вид ClearCase с «правильной» конфигурационной спецификацией (то есть «спецификацией конфигурации») .

По сути, я имею в виду представление ClearCase, импортирующее в соответствующую ветку ClearCase различные копии файлов Subversion, расположенных в «каталогах ветвей». А затем импортируйте в правильном порядке «теги» (все еще копии в репозитории SVN) в представлении импорта ClearCase с меткой, установленной сразу после импорта такого типа.

Таким образом, основная «проблема» заключается в том, чтобы слепо импортировать всю структуру SVN: это привело бы к фактическим каталогам, которые вообще не должны присутствовать в ClearCase, поскольку ветви и теги являются первоклассным гражданином с этим инструментом, а не « дешевый экземпляр "как в SVN.

Хороший сценарий, с которого можно начать (и, конечно, адаптировать): svn2git , который обнаруживает ветви и теги SVN и пытается импортировать содержимое этих «каталогов». в git (но также может импортировать их в ClearCase через правильный системный вызов команды 'clearfsimport').

Поскольку импорт одной ревизии может быть довольно продолжительным, реалистичным подходом было бы ограничить импорт скриптом:

  • метка
  • ГОЛОВА сундука
  • ГОЛОВА заявленных веток

При импорте ветвей это означает создание brtype, а затем установку метки (отправной точки), наконец, изменение спецификации конфигурации для получения следующих правил выбора:

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

Важным моментом является конечный результат без каталогов, представляющих ветви и теги, присутствующие в SVN.
Оттуда вы сможете перемещать / переименовывать основные каталоги в любую структуру, какую захотите, например ту, которая подходит для объявления компонентов UCM (если вы хотите использовать UCM).

2 голосов
/ 21 июля 2009

При использовании скрипта svn2cc вы получите playall.bat.

Если вы запустите следующий скрипт, он будет помечен между ревизиями, чтобы впоследствии к ним было проще обращаться.

Возможно, немного чрезмерно, но некоторые могут найти это полезным. Я не извиняюсь за качество кода:)

# 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($_ =~ /^call chout_\d{1,3}.bat/)
    {
        $revisions++;
    }
    $output .= $_;
}
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;
...