Existe uma ferramenta de migration do CVS para o Git?

Eu pretendo mudar do CVS para o Git. No caso do SVN, parece haver cvs2svn . Existe uma ferramenta semelhante para migrar facilmente do CVS para o Git?

A única ferramenta que tem importação incremental parece ser git-cvsimport . Se você quiser converter ( migrar ) do CVS para o Git, a melhor solução por agora parece ser mencionada acima do modo cvs2git do cvs2svn .

Veja também a página Interfaces Frontends And Tools no Git wiki, seção sobre interação com outros sistemas de controle de revisão.

cvs2git

Além de respostas fornecidas, aqui está um guia sobre como converter cvs para git usando a ferramenta cvs2git. Aqui, modulename é um nome do diretório CVS que você deseja importar.

Pré-requisitos

cvs2svn pacote cvs2svn (que inclui o comando cvs2git) já deve estar instalado.

Atualização: as etapas 1 e 2 não estão totalmente corretas – antes de tentar, leia o comentário abaixo por mhagger, o mantenedor do cvs2git

  1. check-out modulename

     cvs -d URL co -P modulename 
  2. crie um CVSROOT vazio necessário para cvs2git

     mkdir modulename/CVSROOT 
  3. baixe um exemplo de cvs2git.options em http://cvs2svn.tigris.org/svn/cvs2svn/trunk/cvs2git-example.options (usuário “guest” sem senha)

  4. edite o arquivo cvs2git.options. Substitua r’test-data / main-cvsrepos ‘por’ modulename ‘. Editores transformam.

     # edit this run_options.set_project( r'modulename', # and this author_transforms={ 'jrandom' : ('J. Random', 'jrandom@example.com'), 'mhagger' : 'Michael Haggerty ', 
  5. execute o cvs2git para criar arquivos temporários do git

     cvs2git --options=cvs2git.options --fallback-encoding utf-8 
  6. criar repository git

     mkdir gitrepo && cd gitrepo && git init . 
  7. import from git temp arquivos criados por cvs2git

     cat ../cvs2git-tmp/git-{blob,dump}.dat | git fast-import 
  8. cópia de trabalho de checkout

     git reset --hard 

cvs2svn tem um modo cvs2git .

Se alguém ainda tiver a infelicidade de usar o CVS, você pode tentar “porcaria”: https://github.com/rcls/crap É rápido (na medida em que acessar o CVS pode ser rápido), suporta as bagunças que você encontra em cvs repos e incremental.

Uma alternativa pode ser usar o git cvsimport *

Eu mesmo não tentei fazer isso, mas amigos relataram sucesso em converter primeiro do CVS para o SVN, e depois do SVN para o Git. Parece que as ferramentas para fazer essas respectivas transições foram mais bem sacudidas do que uma transição direta do CVS para o Git.

Você pode adicionar fromcvs à lista. Converte bem e é extremamente rápido e também incremental. Não faz etiquetas adesivas, apenas ramos, no entanto.

Eu tentei cvs2git, git-cvsimport e parsecvs.

cvs2git às vezes (tanto quanto me lembro) cria ramificações falsas para tags.

O git-cvsimport não suporta múltiplas tags para um changeset. É possível, no entanto, pegar algumas alterações adicionais para o cvsps suportá-lo e alterar o git-cvsimport original para algo que usa cvsps atualizados (tentei e parece funcionar). No lado da vantagem, ele suporta atualizações incrementais e possui alguma lógica para importar corretamente as mesclagens (mas REQUER o formato apropriado para a mensagem de confirmação).

Parsecvs até agora me deu os melhores resultados. Infelizmente, o código disponível na web não é compilado corretamente com o último git. A mudança, embora não seja trivial, é factível.

EDIT: Parece ESR assumiu cvsps e parsecvs para que haja alguma esperança para a migration CVS-> GIT. MAS ele já mencionou em algumas listas que ele pode declarar algumas das ferramentas que ele assumiu recentemente oficialmente mortas.

Você pode usar o git cvsimport . Requer que o cvsps seja instalado, mas você precisa instalar o 2.x, já que 3.x não é mais incompatível .

Em seguida, importe o repository CVS no git vazio. Uso da amostra:

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

No OSX você instala o cvsps-2.1 da seguinte maneira (tendo brew ):

 brew tap homebrew/versions brew install cvsps2 brew link cvsps2 

Você também pode usar a ferramenta cvs2git que pode converter um repository CVS em git. No entanto, você precisa ter access a um diretório CVSROOT.

Verifique a documentação do cvs2git para as etapas de instalação.

Exemplo de uso:

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

Isso criaria dois arquivos de saída no formato git fast-import. Os nomes desses arquivos são especificados pelo arquivo de opções ou pelos argumentos da linha de comandos. No exemplo, esses arquivos são denominados cvs2git-tmp/git-blob.dat e cvs2git-tmp/git-dump.dat .

Esses arquivos podem ser importados para o repository git vazio por:

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

Em seguida, exclua a ramificação TAG.FIXUP e execute gitk --all para visualizar os resultados da conversão.

Verifique se há mais, executando: cvs2git --help .

Eu li a resposta dos comentários de Vanuan e Mhagger. Infelizmente o mhagger não postou como fazer isso com o cvs2git . Está tudo muito bem escrito aqui: http://www.mcs.anl.gov/~jacob/cvs2svn/cvs2git.html

Eu usei o cvs2git vez do git-cvsimport porque a documentação do git-cvsimport sugere usá-lo para evitar os problemas do git-cvsimport : https://www.kernel.org/pub/software/scm/git/docs/git -cvsimport.html # issues

Segue a essência dele que funcionou para mim criar um repository git de um repository CVS do sourceforge no 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 

A etapa do rsync é necessária porque o cvs2git precisa de access a todo o histórico. Um simples checkout não é suficiente.

Eu encontrei cvs-fast-export fez um excelente trabalho. Eu tive que baixar e compilá-lo sozinho, mas não tive nenhum problema significativo ao fazê-lo.