Programing

CVS에서 Git으로의 마이그레이션 도구가 있습니까?

crosscheck 2020. 11. 25. 07:40
반응형

CVS에서 Git으로의 마이그레이션 도구가 있습니까?


CVS에서 Git으로 전환하려고합니다. SVN의 경우 cvs2svn. CVS에서 Git으로 쉽게 마이그레이션 할 수있는 유사한 도구가 있습니까?


증분 가져 오기 가있는 유일한 도구는 git-cvsimport 인 것 같습니다 . CVS에서 Git 으로 변환 ( 마이그레이션 )하려면 지금 가장 좋은 솔루션 은 cvs2svn의 cvs2git 모드 위에 언급 된 것 같습니다 .

도 참조 인터페이스 프론트 엔드 및 도구 힘내 위키, 다른 버전 관리 시스템과의 상호 작용에 대한 섹션에 페이지를.


cvs2git

제공된 답변 외에도 cvs2git 도구를 사용하여 cvs를 git로 변환하는 방법에 대한 가이드가 있습니다. 여기서 modulename은 가져 오려는 CVS 디렉토리의 이름입니다.

전제 조건

cvs2svn 패키지 (cvs2git 명령 포함)가 이미 설치되어 있어야합니다.

업데이트 : 1 단계와 2 단계가 완전히 올바르지 않습니다. 시도하기 전에 cvs2git의 관리자 인 mhagger가 아래 주석을 읽으십시오.

  1. 체크 아웃 모듈 이름

    cvs -d URL co -P modulename
    
  2. cvs2git에 필요한 빈 CVSROOT 만들기

    mkdir modulename/CVSROOT
    
  3. http://cvs2svn.tigris.org/svn/cvs2svn/trunk/cvs2git-example.options 에서 cvs2git.options의 예를 다운로드합니다 (비밀번호가없는 사용자 "guest").

  4. cvs2git.options 파일을 편집하십시오. r'test-data / main-cvsrepos '를'modulename '으로 바꿉니다. 작성자 변환을 편집하십시오.

    # edit this
    run_options.set_project(  r'modulename',
    
    # and this
    author_transforms={
        'jrandom' : ('J. Random', 'jrandom@example.com'),
        'mhagger' : 'Michael Haggerty <mhagger@alum.mit.edu>',
    
  5. cvs2git을 실행하여 git temp 파일 생성

    cvs2git  --options=cvs2git.options --fallback-encoding utf-8
    
  6. git 저장소 생성

    mkdir gitrepo && cd gitrepo && git init .
    
  7. cvs2git에서 만든 git 임시 파일에서 가져 오기

    cat ../cvs2git-tmp/git-{blob,dump}.dat | git fast-import
    
  8. 체크 아웃 작업 사본

    git reset --hard
    

cvs2svn에는 cvs2git 모드가 있습니다.


여전히 CVS를 사용하는 데 불행한 사람이 있다면 "crap"을 시도해 볼 수 있습니다. https://github.com/rcls/crap 빠릅니다 (CVS에 액세스하는 것이 빠를 수있는 한), cvs 저장소에서 찾을 수있는 문제를 지원합니다. , 증분.


대안은 git cvsimport * 를 사용하는 것입니다.


나는 이것을 직접 시도하지 않았지만 친구들은 먼저 CVS에서 SVN으로 변환 한 다음 SVN에서 Git으로 변환하는 데 성공했다고보고했습니다. 이러한 각각의 전환을 수행하는 도구는 직접 CVS에서 Git으로 전환하는 것보다 더 철저하게 흔들린 것 같습니다.


cvs2git, git-cvsimport 및 parsecvs를 시도했습니다.

cvs2git은 때때로 (내가 기억하는 한) 태그에 대한 가짜 브랜치를 만듭니다.

git-cvsimport는 변경 세트에 대해 여러 태그를 지원하지 않습니다. 그러나 cvsps를 지원하기 위해 추가 변경 사항을 가져 와서 원래 git-cvsimport를 업데이트 된 cvsps를 사용하는 것으로 변경할 수 있습니다 (내가 시도했지만 작동하는 것 같습니다). 장점 측면에서는 증분 업데이트를 지원하고 병합을 적절하게 가져 오는 로직이 있습니다 (그러나 커밋 메시지에 적절한 형식이 필요함).

지금까지 parsecvs가 최상의 결과를 얻었습니다. 불행히도 웹에서 사용 가능한 코드는 최신 git로 깔끔하게 컴파일되지 않습니다. 사소하지는 않지만 변경이 가능합니다.

편집 : ESRcvspsparsecv 를 모두 인수 한 것처럼 보이 므로 CVS-> GIT 마이그레이션에 대한 희망이 있습니다. 그러나 그는 이미 일부 메일 링리스트에서 그가 최근에 인수 한 도구 중 일부가 공식적으로 죽었다고 선언 할 수 있다고 이미 언급했습니다.


fromcvs 를 목록에 추가 할 수 있습니다 . 잘 변환되고 매우 빠르며 점진적입니다. 그러나 고정 태그는 수행하지 않고 분기 만 수행합니다.


사용할 수 있습니다 git cvsimport. 그것은 필요 cvsps설치할 수 있지만, 3.x를 그대로 당신은 2.X를 설치할 필요가 호환되지 더 이상.

그런 다음 빈 git에서 CVS 저장소를 가져옵니다. 샘플 사용법 :

git cvsimport -C RepoName -r cvs -o master -k -v -d:pserver:anonymous@reponame.cvs.sourceforge.net:/cvsroot/path ModuleName

OSX에서는 cvsps-2.1다음과 같은 방법으로 설치 합니다 (가짐 brew).

brew tap homebrew/versions
brew install cvsps2
brew link  cvsps2

You can also use cvs2git tool which can convert a CVS repository to git. However you need to have access to a CVSROOT directory.

Check cvs2git documentation for installation steps.

Example usage:

cvs2git --blobfile=git-blob.dat --dumpfile=git-dump.dat --username=cvs2git /path/to/cvs/repo

This would create two output files in git fast-import format. The names of these files are specified by your options file or command-line arguments. In the example, these files are named cvs2git-tmp/git-blob.dat and cvs2git-tmp/git-dump.dat.

These files can be imported into empty git repository by:

cat git-blob.dat git-dump.dat | git fast-import

Then delete the TAG.FIXUP branch and run gitk --all to view the results of the conversion.

Check for more, by running: cvs2git --help.


I read the answer by Vanuan and mhagger's comments to it. Unfortunately mhagger didn't post how to do it with cvs2git. It is all very well written up here: http://www.mcs.anl.gov/~jacob/cvs2svn/cvs2git.html

I used cvs2git instead of git-cvsimport because the documentation of git-cvsimport suggests to use it instead to avoid the problems of git-cvsimport: https://www.kernel.org/pub/software/scm/git/docs/git-cvsimport.html#issues

It follows essence of it that worked for me to create a git repository from a sourceforge CVS repository on Debian Sid:

$ apt-get install cvs2svn cvs
$ mkdir project.cvs
$ rsync -av rsync://${PROJECT}.cvs.sourceforge.net/cvsroot/${PROJECT}/ project.cvs
$ cvs2git --blobfile=git-blob.dat --dumpfile=git-dump.dat --username=cvs2git project.cvs
$ mkdir project.git
$ cd project.git
$ git init
$ cat ../git-blob.dat ../git-dump.dat | git fast-import

The rsync step is needed because cvs2git needs access to the whole history. A simple checkout is not enough.


내가 발견 CVS-빠른 속도로 수출이 훌륭한 일을했다. 직접 다운로드하고 컴파일해야했지만 그렇게하는 데 큰 문제는 없었습니다.

참고 URL : https://stackoverflow.com/questions/881158/is-there-a-migration-tool-from-cvs-to-git

반응형