Вопрос
Итак, на этот раз все наоборот - мне нужно перенести проект на основе SVN в ClearCase.Существуют ли какие-либо инструменты, которые немного упростили бы процесс (вместо того, чтобы создавать пользовательский скрипт), и есть ли какие-либо подводные камни у кого-либо, у кого был опыт в этом?
Спасибо!
Решение
Как уже упоминалось здесь (ibm) и в этот поток, нет прямого инструмента для импорта данных SVN в ClearCase.
Это означает, что пользовательский скрипт установит в вашей рабочей области SVN значение соответствующей вехи, а затем очистить простой порт те, которые отображаются в виде ClearCase с "правильной" конфигурационной спецификацией (т.е."спецификация конфигурации").
Под надлежащим я подразумеваю представление ClearCase, импортирующее в соответствующую ветвь ClearCase различные копии файлов Subversion, расположенных в "каталогах ветвей".А затем импортируем в правильном порядке "теги" (все еще копируемые в репозитории SVN) в режиме импорта ClearCase с меткой, установленной сразу после такого импорта.
Итак, главная "уловка" заключается в том, чтобы слепо импортировать всю структуру SVN:это привело бы к созданию реальных каталогов, которых вообще не должно быть в ClearCase, поскольку ветви и теги являются первоклассными с помощью этого инструмента, а не "дешевой копии", как в SVN.
Хорошим сценарием для начала (и, конечно, для адаптации) был бы svn2git ( svn2git ) который обнаруживает ветви SVN и тег и пытается импортировать содержимое этих "каталогов" в git (но также может импортировать их в ClearCase с помощью правильного системного вызова команды 'clearfsimport').
Поскольку импорт одной ревизии может быть довольно длительным, реалистичным подходом было бы ограничить скрипт только импортом:
- Теги
- ГОЛОВКА ствола
- РУКОВОДИТЕЛЬ заявленных филиалов
При импорте ветвей это означает создание brtype, а затем установку метки (начальной точки) и, наконец, изменение спецификации конфигурации, чтобы получить следующие правила выбора:
element * .../svnBranch
element * STARTING_LABEL -mkbranch svnBranch
element /main/0 -mkbranch svnBranch
Важным моментом является получение конечного результата без каталогов, представляющих ветвь и тег, присутствующие в SVN.
Оттуда вы сможете перемещать / переименовывать основные каталоги в любую структуру, которую вы хотите, например, ту, которая подходит для объявления компонента UCM (если вы хотите использовать UCM).
Другие советы
При использовании скрипта 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;