2013-06-14 5 views
3

큰 CVS 저장소를 cvs2git으로 GIT로 마이그레이션합니다. 사내 도구의 경우 CVS 개정 번호에서 일부 파일의 GIT 개정 해시로 매핑해야합니다.cvs2git : CVS 개정 번호에서 Git 개정 해시로 매핑 유지 가능성

cvs2svn의 매개 변수는 --cvs-revnums이지만이 수정본은 svn 파일 속성에만 저장되며 git에서는 사용할 수 없습니다.

나는 git cvsimport -R이이 매핑을 생성하는 것을 보았지만 cvs2git에는 많은 단점이 있습니다.

--cvs-revnums에서 정보를 얻을 수있는 다른 방법이 있습니까?

답변

2

정확하게 이해하면 "FOO의 CVS 개정 X.Y를 포함하는 최초의 자식 커밋은 무엇입니까?"라는 질문에 대답하는 방법이 필요합니다. 당신이 cvs2git 자세한 정보 출력 ("-v")을 설정하면

후, 각 힘내에 추가되고있는 CVS 파일 수정이 커밋 CreateRevsPass 동안 표시 cvs2git :

CVS Revision grouping: 
    Time: Fri May 23 02:31:36 2003 
Creating Subversion r23 (commit) 
proj/default 1.2.2.1 
proj/sub1/default 1.2.2.1 
proj/sub2/subsubA/default 1.1.2.1 

이 가까운 것 네가 원해. 그러나 의사 - Subversion 개정 번호 (예 : "r23")를 Git 커밋 해시로 매핑하는 쉬운 방법이 없으므로 테이블을 생성하는 데 충분한 정보가 아닙니다. 실제로 cvs2git은 Git 해시 자체를 생성하지 않기 때문에 추상적 인 형태로 커밋을 만들고 해시를 계산하는 "git fast-import"에 씁니다. 난 그냥 "표시는"해당 즉, 조금 더 정보를 방출하는 OutputPass 원인 cvs2svn의 트렁크 버전을 변경했다

내가 할거야 무엇

Tellya ... 어떤 의사에 - 버전 개정 번호. 위의 출력은 다음과 같습니다 커밋 :

Writing commit r23 on Branch('B_MIXED') (mark :1000000021) 

마크 "1000000021", 차례로하는 자사의 마크를 작성하는 "자식 빠른 가져 오기"를 요청하여 망할 놈의 SHA-1으로 변환 할 수 있습니다 파일이과 같은 줄에 대한 결과 파일에

cat ../git-blob.dat ../git-dump.dat | git fast-import --export-marks=FILENAME 

봐 :

:1000000021 0aa255270fbb94ad691d5391a6d37c2ee6d78b03 

있는 당신이 망할 놈의 해시를 읽을 수 있습니다.

이 정보를 모두 모으는 데 필요한 작업이 조금 있지만 지금은 적어도 이어야합니다.

이 방법은 CVS 파일 개정판이 들어있는 첫 번째 자식 커밋 만 알려줍니다. 아니요은 해당 파일 개정판이 다른 분기에 병합 된시기를 알려줍니다. 사실, CVS와 Git 사이의 임피던스 불일치로 인해 Git commit ancestry 그래프에 의존해서 정보를 얻을 수 없습니다. 따라서 이것을 완벽하고 편리한 기능으로 만들기 위해해야 ​​할 일이 더 많습니다.

희망이 있습니다.

1

답장을 보내 주셔서 감사합니다.

이제 CVS에서 GIT로 성공적으로 마이그레이션을 마쳤습니다.

  1. : 우리는 모든 저장소에있는 파일의 몇 힘내 해시 및 CVS 버전 간의 매핑을 필요로하기 때문에

    만 는 나를 위해 조금 더 쉬웠다 방식으로 과제를 해결 cvs2svn을 사용하여 CVS에서 CVS 저장소로 CVS 저장소를 마이그레이션합니다.

  2. 파일 A의 경우 : CVS 서버의 모든 브랜치에서 모든 CVS 커밋을받습니다. 하나의 목록으로 시간순으로 정렬됩니다.
  3. GIT의 파일 A에 대한 모든 브랜치에서 모든 커밋을받습니다.이 목록은 단일 목록에 시간순으로 정렬됩니다 ("이 커밋은 cvs2svn에서 제조되었습니다"라는 주석이있는 커밋을 무시하십시오).
  4. 두 목록에서 GIT가 커밋하는 CVS의 양이 정확히 동일해야합니다 (아무도 CVS에 대한 최신 커밋을하지 않도록).
  5. 모든 CVS 개정판을 단일 GIT 해시에 매핑하십시오.

이제 모든 CVS 개정판에 CVS 파일 개정판이 포함 된 첫 번째 힘내기가 있습니다. CVS가 다른 브랜치에서 같은 타임 스탬프로 커밋하지 않고 하나의 파일을 가지고 있기 때문에 이것은 우리에게 도움이되었습니다.