【问题标题】:Moving from SVN to ClearCase从 SVN 迁移到 ClearCase
【发布时间】:2010-11-05 02:34:52
【问题描述】:

所以,这次正好相反——我需要将一个基于 SVN 的项目迁移到 ClearCase。是否有任何工具可以使该过程更容易一些(而不是编写自定义脚本),是否有任何有这样做经验的人的陷阱?

谢谢!

【问题讨论】:

  • 我很震惊有人认为从 SVN 升级到 ClearCase 是一种升级???
  • 我确实支持了你的问题 (+1),但你应该知道社区并没有从有利的角度看待 ClearCase(哎呀,我并不总是喜欢它,尤其是当涉及到每个文件的文件操作性能时;))。因此,您可能想要重命名您的标题:“upgrade”和“ClearCase”在某些特定场景(具有多个组件依赖项的复杂合并工作流程)中可能有意义,但没有那种上下文......它似乎激怒了我们的一些人SO用户;)
  • 我之所以这么称呼它是因为有一个名为“从 ClearCase 降级”的主题,所以我认为它是准确的 :)
  • @Spedge 我确实收集到了 ;) 但是有些人可能无法超越标题,并且会因为单词的关联而急于对问题投反对票。协会的一种内疚......
  • 呸,好吧,我会屈服于同伴压力——只是不要试图让我喝酒或用 Python 编写代码。我不会做的!我不会.....

标签: svn clearcase


【解决方案1】:

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

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

正确地说,我是指将位于“分支目录”中的 Subversion 文件的不同副本导入相关 ClearCase 分支的 ClearCase 视图。然后在 ClearCase 导入视图中以正确的顺序导入“标签”(仍然在 SVN 存储库中复制),并在这种导入之后设置标签。

所以主要的“陷阱”是盲目地导入所有 SVN 结构:这将导致在 ClearCase 中根本不应该存在的实际目录,因为分支和标签是这个工具的一等公民,而不是'像 SVN 中的廉价副本。

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

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

  • 标签
  • 主干头
  • 已声明分支的 HEAD

在导入分支的时候,就是创建brtype,然后设置一个标签(一个起点),最后修改config spec,得到如下选择规则:

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

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

【讨论】:

  • 似乎是一个非常完整的答案,但我只会在我完成它后给你功劳:)
  • @Spedge:或者更好的是,修改 svn2git ruby​​ 脚本,将其发布在这里并选择 your 答案作为官方答案。给你一些功劳;)
  • 我最终使用了 svn2cc 脚本,并且只修改了输出的批处理脚本,以包含每个修订的基线,这样这些人就可以回去查看他们之前所做的工作。感谢 VonC 的提醒!
【解决方案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;

【讨论】:

    猜你喜欢
    • 2023-03-25
    • 1970-01-01
    • 2010-10-26
    • 1970-01-01
    • 1970-01-01
    • 2015-01-14
    • 1970-01-01
    • 2016-07-03
    • 2010-09-10
    相关资源
    最近更新 更多