2

今回は逆です。SVN ベースのプロジェクトを ClearCase に移行する必要があります。(カスタム スクリプトを作成するのではなく) プロセスを少し簡単にするツールはありますか?また、これを行った経験のある人からの落とし穴はありますか?

ありがとう!

4

2 に答える 2

5

ここ (ibm)およびこのスレッドで述べたように、SVN データを ClearCase にインポートするための直接的なツールはありません。

つまり、SVN ワークスペースを関連するマイルストーンに設定し、それらを「適切な」構成仕様 (つまり「構成仕様」) を使用して ClearCase ビューにclearfsimportするカスタム スクリプトを意味します。

適切とは、「ブランチ ディレクトリ」にある Subversion ファイルのさまざまなコピーを関連する ClearCase ブランチにインポートする ClearCase ビューを意味します。次に、ClearCase インポート ビューで「タグ」(まだ SVN リポジトリにコピーされている) を正しい順序でインポートし、その種類のインポートの直後にラベルを設定します。

したがって、主な「落とし穴」は、すべての SVN 構造をやみくもにインポートすることです。これにより、ClearCase にはまったく存在しないはずの実際のディレクトリが作成されます。これは、ブランチとタグがこのツールの第一級の市民であり、「安物のコピー」ではないためです。 SVNのように。

開始する (そしてもちろん適応する) 適切なスクリプトはsvn2gitであり、SVN ブランチとタグを検出し、それらの「ディレクトリ」の内容を git にインポートしようとします (ただし、右側から ClearCase にインポートすることもできます'clearfsimport' コマンドへのシステム コール')。

1 つのリビジョンのインポートにはかなりの時間がかかる可能性があるため、現実的なアプローチは、スクリプトをインポートのみに制限することです。

  • タグ
  • トランクのHEAD
  • 宣言されたブランチの HEAD

ブランチをインポートするときは、brtype を作成し、次にラベル (開始点) を設定し、最後に次の選択ルールを取得するために構成仕様を変更することを意味します。

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

重要な点は、SVN に存在するブランチとタグを表すディレクトリなしで最終結果を得ることです。
そこから、UCM コンポーネント宣言 (UCM を使用する場合) に適した構造など、メイン ディレクトリを任意の構造に移動/名前変更できます。

于 2009-06-23T13:52:56.350 に答える
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;
于 2009-07-21T09:31:56.723 に答える