2009-10-25 21 views
39

Tengo un 20-year-old project que me gustaría migrar de RCS a git, sin perder el historial. Todas las páginas web sugieren que One True Path es a través de CVS. Pero después de una hora de buscar en Google y probar diferentes scripts, aún no he encontrado nada que haya logrado convertir mi árbol de proyectos RCS a CVS. Espero que las buenas personas de Stackoverflow sabrán lo que realmente funciona, a diferencia de lo que se dice que funciona y no funciona.¿Migrar proyecto de RCS a git?

(I buscados Stackoverflow utilizando tanto el nativo SO búsqueda y una búsqueda de Google, pero si hay una respuesta adecuada en la base de datos, no me di cuenta.)

ACTUALIZACIÓN: La herramienta rcs-fast-export en http://git.oblomov.eu/rcs-fast-export fue reparado en 14 de abril de 2009, y esta versión parece funcionar para mí. Esta herramienta convierte directamente en git sin CVS intermedio. Gracias Giuseppe y Jakub !!!


cosas que no funcionaban que todavía recuerdo:

  • El guión rcs-to-cvs que se incluye en el directorio contrib de las fuentes de CVS

  • La herramienta rcs-fast-export en http://git.oblomov.eu/rcs-fast-export en versiones antes 13 de abril de 2010

  • El rcs2cvs secuencia de comandos que se encuentra en un documento llamado "CVS-RCS- HOW-TO documento para Linux"

+5

Si ha encontrado muchas formas en las que * no * funciona, y está preguntando cómo hacerlo, creo que sería inteligente enumerar las formas en que no funcionó, así que nadie desperdicia más tiempo :) –

+0

Como nota al margen, algunas personas consideran que la mejor manera de CVS (una vez que llegas allí) a git es a través de la subversión. http://stackoverflow.com/questions/881158/is-there-a-migration-tool-from-cvs-to-git/881185#881185 –

+0

¿Por qué exactamente tiene que mantener el historial? – hasen

Respuesta

21

Ver InterfacesFrontendsAndTools página en Git Wiki, en "Herramientas", "Interacción con otros sistemas de control de revisión", "Otros" . Allí encontrará una descripción y un enlace a rcs-fast-export (gitweb) Script de Ruby de Giuseppe "Oblomov" Bilotta.

(la búsqueda web también encontrará la página de Ohloh y el anuncio del proyecto mencionado).

+3

para aclarar para Norman, una herramienta de "exportación rápida" es un estándar de facto moderno para comunicarse a través de sistemas VCS, la herramienta de git para leer esta información se llama 'git fast-import' – u0b34a0f6ae

+0

Desafortunadamente esta herramienta bombardea con un seguimiento de pila, comenzando con un error en la línea 420. Esto es bastante típico de mis tristes experiencias. ¿Mencioné que la historia de RCS cubre 20 años? –

+0

¿Intentaste contactar al autor de rcs-fast-export? Sin embargo, es probable que haya sido una herramienta de conversión única para el autor, y el guión no se mantiene. –

0

Tuve este problema y luché con cvs2svn, parsecvs y otras cosas. parsecvs obtuve el más cercano pero Keith parece haberlo dejado atrás y ahora aparecen horquillas al azar. El problema que tuve fue que analizaría los archivos RCS sin problemas, pero lo último que hizo fue git rm el archivo, así que tuve que rebuscar con git reset para deshacer la eliminación.

Entonces descubrí de mercurial convert: https://www.mercurial-scm.org/wiki/ConvertExtension Problema resuelto!

Intenté agregar incrementalmente algunas cosas de árboles RCS separados, parece haber funcionado.

1

Como regla general, debe tener cuidado con los scripts que ejecuta. Para RCS -> GIT puede ser en su mejor interés seguir la metodología RCS-> CVS-> GIT.

Echó un vistazo rápido a rcs-fast-export.rb a partir de 2011-01-12 y se encontró con esta parte del código. Esto es aterrador en el mejor de los casos.

# steal username/email data from other init files that may contain the 
# information 
def steal_username 
    [ 
      # the user's .hgrc file for a username field 
      ['~/.hgrc', /^\s*username\s*=\s*(["'])?(.*)\1$/,  2], 
      # the user's .(g)vimrc for a changelog_username setting 
      ['~/.vimrc', /changelog_username\s*=\s*(["'])?(.*)\1$/, 2], 
      ['~/.gvimrc', /changelog_username\s*=\s*(["'])?(.*)\1$/, 2], 
      [] 
    ].each do |fn, rx, idx| 
... 
+0

La terminología puede ser aterradora, pero no hay nada que hacer aquí. RCS usa nombres de usuario de Unix y git quiere los nombres de estilo "First Last <[email protected]>". –

1

OK, después de un pequeño retoque, encontré que era trivial convertir RCS a CVS. Los archivos están en el mismo formato, por lo que simplemente se trata de mover los archivos a una raíz de CVS existente. Esto supone que tienes acceso a los archivos RCS.

# Create CVS root dir. You only need to do this once. 
mkdir $HOME/cvs/ 
cd $HOME/cvs/ 
cvs init 

# Import a repository from RCS to CVS 
cp -a _projectname_/RCS $HOME/cvs/_projectname_ 
Cuestiones relacionadas