2009-06-23 82 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;