2009-05-19 13 views

Respuesta

5

No he intentado esto por mí mismo, pero los amigos han reportado buenos resultados convirtiendo primero de CVS a SVN, y luego de SVN a Git. Parece que las herramientas para hacer esas transiciones respectivas se han sacudido más a fondo que una transición directa de CVS a Git.

7

Una alternativa podría ser el uso de git cvsimport *

+13

git cvsimport está roto y silenciosamente dará resultados incorrectos en todos los repositorios CVS menos triviales. Por ejemplo, consulte la sección "PROBLEMAS" en su documentación (http://www.kernel.org/pub/software/scm/git/docs/git-cvsimport.html) o ejecute las pruebas unitarias. – mhagger

32

La única herramienta que tiene incrementales importación parece ser git-cvsimport. Si desea convertir (migrate) de CVS a Git, la mejor solución por el momento parece ser la mencionada anteriormente cvs2git mode of cvs2svn.

Véase también la página Interfaces Frontends And Tools en la wiki de Git, sección sobre la interacción con otros sistemas de control de revisiones.

+2

¿Cuál es la diferencia entre una importación incremental y una migración? –

+2

@ HaroldL.Brown: la importación incremental significa que está utilizando CVS mientras tanto, la migración se detiene con CVS y se mueve a Git (quizás con la ayuda de 'git-cvsserver'). –

2

Puede agregar fromcvs a la lista. Se convierte bien y es extremadamente rápido y también incremental. Sin embargo, no hace etiquetas adhesivas, solo ramas.

2

He intentado cvs2git, git-cvsimport y parsecvs.

cvs2git a veces (por lo que recuerdo) crea ramas falsas para las etiquetas.

git-cvsimport no es compatible con varias etiquetas para un conjunto de cambios. Sin embargo, es posible obtener algunos cambios adicionales para cvsps que lo admitan y cambiar el git-cvsimport original por algo que use cvsps actualizados (lo he probado y parece funcionar). Por el lado de la ventaja, admite actualizaciones incrementales y tiene cierta lógica para importar correctamente las fusiones (pero REQUIERE el formato apropiado para el mensaje de confirmación).

parsecvs hasta ahora me ha dado los mejores resultados. Lamentablemente, el código disponible en la web no se compila de forma limpia con el último git. El cambio, aunque no es trivial, es factible.

EDITAR: Parece que ESR se hizo cargo de cvsps y parsecvs así que hay alguna esperanza para la migración CVS-> GIT. PERO ya mencionó en una lista de correo que puede declarar algunas de las herramientas que tomó recientemente oficialmente muertas.

+0

ParseCVS parece estar en https://github.com/BartMassey/parsecvs. –

+0

ParseCVS se ha convertido en [cvs-fast-export] (http://www.catb.org/esr/cvs-fast-export/) – hvd

16

cvs2git

Además de las respuestas proporcionadas, he aquí una guía sobre cómo convertir a git cvs usando la herramienta de cvs2git. Aquí, modulename es el nombre del directorio de CVS que desea importar.

Requisitos previos

cvs2svn paquete (que incluye comandos cvs2git) debe ser instalado.

Actualización: los pasos 1 y 2 no son totalmente correctas - antes de intentar, leer el comentario anterior por mhagger, el mantenedor de cvs2git

  1. la caja modulename

    cvs -d URL co -P modulename 
    
  2. crear una vacío CVSROOT necesario por cvs2git

    mkdir modulename/CVSROOT 
    
  3. descargar un ejemplo de cvs2git.options en http://cvs2svn.tigris.org/svn/cvs2svn/trunk/cvs2git-example.options (usuario "invitado" sin contraseña)

  4. editar archivos cvs2git.options. Reemplazar r'test-data/main-cvsrepos 'con' nombre de módulo '. Editar autores se transforma.

    # edit this 
    run_options.set_project( r'modulename', 
    
    # and this 
    author_transforms={ 
        'jrandom' : ('J. Random', '[email protected]'), 
        'mhagger' : 'Michael Haggerty <[email protected]>', 
    
  5. plazo cvs2git para crear archivos temporales git

    cvs2git --options=cvs2git.options --fallback-encoding utf-8 
    
  6. crear repositorio git

    mkdir gitrepo && cd gitrepo && git init . 
    
  7. importación de archivos temporales creados por git cvs2git

    cat ../cvs2git-tmp/git-{blob,dump}.dat | git fast-import 
    
  8. pago y envío copia de trabajo

    git reset --hard 
    
+0

El enlace del archivo de opciones de ejemplo solicita un usuario/contraseña. Está en la documentación de cvs2git bajo uso. http://cvs2svn.tigris.org/cvs2git.html – txyoji

+0

Puede usar "invitado" sin contraseña. – Vanuan

+0

cvs2git parece ser muy sensible sobre el uso del archivo .options correcto para la versión del script que está utilizando, así que use el que viene con la versión que está intentando. – Sedrik

8

Si alguien todavía tiene la desgracia de usar CVS, usted podría tratar de "basura": https://github.com/rcls/crap Es rápido (por lo que accede a CVS puede ser rápido), es compatible con los líos que encuentras en cvs repos y incremental.

+2

"mierda" es el salvavidas. ¡Es lo único que me ha funcionado hasta ahora! – York

1

Puede usar git cvsimport. Requiere cvsps para instalarse, pero necesita instalar 2.x, ya que 3.x es not incompatible.

Luego importe el repositorio de CVS en git vacío. Ejemplo de uso:

git cvsimport -C RepoName -r cvs -o master -k -v -d:pserver:[email protected]:/cvsroot/path ModuleName 

en OSX instalar cvsps-2.1 de la manera siguiente (teniendo brew):

brew tap homebrew/versions 
brew install cvsps2 
brew link cvsps2 

También puede utilizar cvs2git herramienta que puede convertir un repositorio CVS para git. Sin embargo, debe tener acceso a un directorio CVSROOT.

Compruebe cvs2git documentation para conocer los pasos de instalación.

Ejemplo de uso:

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

Esto crearía dos archivos de salida en formato de importación rápida git.Los nombres de estos archivos están especificados por su archivo de opciones o argumentos de línea de comandos. En el ejemplo, estos archivos se llaman cvs2git-tmp/git-blob.dat y cvs2git-tmp/git-dump.dat.

Estos archivos pueden ser importados en repositorio git vacía por:

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

continuación, elimine la rama TAG.FIXUP y ejecutar gitk --all para ver los resultados de la conversión.

Busque más, ejecutando: cvs2git --help.

+1

Gracias por la sugerencia sobre la versión de cvsps - se estaba atascando en eso. –

+0

La página de comando man [cvsimport] (https://www.kernel.org/pub/software/scm/git/docs/git-cvsimport.html) está llena de advertencias, objeciones y más advertencias. Recomienda el uso de cvs2git en su lugar. –

1

Leí la respuesta por los comentarios de Vanuan y mhagger. Lamentablemente, mhagger no publicó cómo hacerlo con cvs2git. Está todo muy bien escrito aquí: http://www.mcs.anl.gov/~jacob/cvs2svn/cvs2git.html

que utilizan cvs2git en lugar de git-cvsimport porque la documentación de git-cvsimport sugiere usarlo en lugar de evitar los problemas de git-cvsimport: https://www.kernel.org/pub/software/scm/git/docs/git-cvsimport.html#issues

De ello se desprende esencia de lo que funcionó para mí para crear un repositorio git de un repositorio CVS de Sourceforge en 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 

el paso rsync es necesario porque cvs2git necesita tener acceso a la totalidad historia. Un pago simple no es suficiente.

0

Encontré cvs-fast-export hice un trabajo excelente. Tuve que descargarlo y compilarlo yo mismo, pero no tuve ningún problema significativo al hacerlo.

Cuestiones relacionadas