2009-06-23 51 views
2

所以,这次相反 - 我需要将基于SVN的项目迁移到ClearCase中。是否有任何工具可以使流程变得更简单(而不是将自定义脚本放在一起),并且有经验的人有任何问题吗?从SVN转移到ClearCase

谢谢!

+7

我只是感到震惊,有人认为从SVN到ClearCase是一个升级? – 2009-06-23 13:59:06

+1

我确实加注了你的问题(+1),但你应该知道社区没有看到ClearCase的好处(哎,我并不总是喜欢它,特别是当涉及到文件每文件操作性能时; ))。因此,您可能想要重命名标题:“升级”和“ClearCase”在某些特定场景(具有多个组件依赖关系的复杂合并工作流程)中可能是有意义的,但没有这种上下文......似乎会激怒我们同样的SO用户;) – VonC 2009-06-23 14:10:42

回答

5

如提到的here (ibm)this thread,没有直接的工具来将SVN数据导入到ClearCase。

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

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

所以主要的'gotcha'是盲目地导入所有的SVN结构:这会导致实际的目录根本不应该出现在ClearCase中,因为分支和标签是使用此工具的一流公民,而不是'便宜的拷贝'就像在SVN中一样。

好的剧本开始与(和适应的课程)将svn2git它会侦测SVN分支和标签,并尝试导入这些“目录”到混帐的内容(也可以导入通过正确的系统调用到'clearfsimport'命令')将它们转换为ClearCase。

由于单个修订的进口可能是相当长的,一个现实的做法是将脚本限制为仅导入:

  • 标签
  • 树干HEAD
  • 申报分支机构的负责人

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

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

重要的一点是要有一个最终结果,而不要在SVN中存在表示分支和标记的目录。
从那里,你将能够移动/重命名主目录到任何你想要的结构,比如适合UCM组件声明的那个(如果你想使用UCM)。

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;