2009-06-23 2 views
2

그래서 이번에는 반대 방향입니다. SVN 기반 프로젝트를 ClearCase로 마이그레이션해야합니다. 프로세스가 조금 더 쉬워 질 수있는 도구가 있습니까 (사용자 지정 스크립트를 작성하는 것보다).이 작업을 수행 한 경험이있는 사람이 있습니까?SVN에서 ClearCase로 이동

감사합니다.

+7

나는 누군가가 SVN에서 ClearCase로 업그레이드하는 것을 고려한다는 사실에 충격을 받았다. ??? –

+1

나는 당신의 질문 (+1)을 업 그레 이드했으나 커뮤니티가 ClearCase를 유리한 방향으로 보지 않는다는 것을 알고 있어야합니다. (지옥, 필자는 항상 파일 당 파일 조작 성능과 관련하여 항상 그런 것은 아닙니다.)). 따라서 제목의 이름을 바꾸고 싶을 수 있습니다. "업그레이드"및 "ClearCase"는 특정 시나리오 (여러 구성 요소 종속성이있는 복잡한 병합 워크 플로)에서 의미가 있지만 그와 같은 상황 없이는 ... 동료의 사용자들)) – VonC

+0

'ClearCase에서 다운 그레이드'라는 주제가 있기 때문에 나는 그것을 정확하다고 생각 했으므로 전화했습니다. – Spedge

답변

5

here (ibm)this thread 에서처럼 SVN 데이터를 ClearCase로 가져 오는 직접적인 도구는 없습니다.

SVN 작업 영역을 관련 중요 시점으로 설정하는 사용자 정의 스크립트를 의미하며, 그 다음에 clearfsimport을 "적절한"구성 사양 (즉, "구성 사양")이있는 ClearCase보기로 변환합니다.

적절하게 말하자면, ClearCase보기는 관련된 ClearCase 브랜치로 Subversion 파일의 다른 사본을 '분기 디렉토리'에 가져 오는 것을 의미합니다. 그런 다음 ClearCase 가져 오기보기에서 '태그'(SVN 저장소에 계속 사본)를 올바른 순서로 가져오고 그 종류의 가져 오기 바로 다음에 레이블이 설정됩니다.

그래서 '주인공'은 모든 SVN 구조를 맹목적으로 가져 오는 것입니다. 즉, 지사와 태그가이 도구를 사용하는 일류 시민이기 때문에 ClearCase에 실제 디렉토리가 없어야합니다. SVN에서와 같이 '저렴한 사본'.

좋은 스크립트는 SVN 지점과 태그를 감지하고 자식에 그 '디렉토리'의 내용을 가져 오려고 않습니다 svn2git은 (뿐만 아니라 가져올 수있을 것입니다로 시작하는 (물론 적응) 'clearfsimport'명령에 대한 올바른 시스템 호출을 통해 ClearCase로).

단일 개정의 수입이 상당히 길 수 있기 때문에, 현실적인 접근 방식은 가져올 수있는 스크립트를 제한하는 것입니다 :

  • 태그 선언 된 지점의
  • HEAD 트렁크의
  • HEAD

분기를 가져올 때 brtype을 만든 다음 레이블 (시작점)을 설정하고 마지막으로 구성 선택을 변경하여 다음 선택 사항을 얻음을 의미합니다. r ules는 :

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

중요한 점은 지점 및 SVN에 존재하는 태그를 나타내는 디렉토리없이 최종 결과를하는 것입니다.
거기에서 UCM 구성 요소 선언에 적합한 구조 (예 : UCM을 사용하려는 경우)와 같은 원하는 구조로 기본 디렉토리를 이동하거나 이름을 바꿀 수 있습니다.

+0

꽤 완벽한 대답처럼 보입니다. 그러나 일단 내가 풀 렸으면 신용을 줄 것입니다. – Spedge

+0

@Spedge : 또는 더 나은 점은 svn2git 루비 스크립트를 수정하는 것입니다. 여기에 게시하고 * 귀하의 대답을 공식적인 것으로 선택하십시오.) * – VonC

+0

나는 svn2cc 스크립트를 사용하여 끝내고 각 개정판에 대한 기준선을 포함하도록 출력 된 일괄 처리 스크립트 만 수정하여 이전에 수행 한 작업을 되돌아 볼 수 있습니다. 헤드 업 VonC에 감사드립니다! – Spedge

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; 
관련 문제