从SVN迁移到ClearCase

时间:2009-06-23 08:46:31

标签: svn clearcase

所以,这次是相反的方式 - 我需要将基于SVN的项目迁移到ClearCase中。是否有任何工具可以让这个过程变得更容易(而不是整理一个自定义脚本),那些有过这方面经验的人是否有任何陷阱?

谢谢!

2 个答案:

答案 0 :(得分:5)

如上所述here (ibm)this thread,没有直接的工具可以将SVN数据导入ClearCase。

这意味着将SVN工作区设置为相关里程碑的自定义脚本,然后clearfsimport将其设置为具有“正确”配置规范的ClearCase视图(即“配置规范”)。

正确地说,我的意思是ClearCase视图将位于“分支目录”中的Subversion文件的不同副本导入相关的ClearCase分支。然后在ClearCase导入视图中以正确的顺序导入'标签'(仍在SVN仓库中复制),并在该导入后立即设置标签。

所以主要的'陷阱'是盲目地导入所有SVN结构:这将导致实际目录在ClearCase中根本不存在,因为分支和标签是使用此工具的一等公民,而不是'便宜的副本'就像在SVN。

一个好的脚本开始(并且当然要适应)将是 svn2git ,它会检测SVN分支和标记,并尝试将这些“目录”的内容导入到git,(但也可以通过对'clearfsimport'命令的正确系统调用将它们导入ClearCase)。

由于单个修订版的导入可能相当长,因此一种现实的方法是将脚本限制为仅导入:

  • 标记
  • 行李箱头
  • 声明的分支的头部

导入分支时,这意味着创建brtype,然后设置标签(起点),最后更改配置规范以获得以下选择规则:

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

重点是在SVN中没有表示分支和标记的目录的情况下得到最终结果 从那里,您将能够将主目录移动/重命名为您想要的任何结构,例如适合UCM组件声明的结构(如果您想使用UCM)。

答案 1 :(得分:2)

使用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;