¿Migrar proyecto de RCS a git?

Tengo un proyecto de 20 años 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 search en Google y probar diferentes scripts, aún no he encontrado nada que convierta con éxito mi tree de proyectos de 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.

(Busqué Stackoverflow utilizando tanto la búsqueda SO nativa como una búsqueda en Google, pero si hay una respuesta útil en la database, la extrañé).

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


Cosas que no funcionaron que todavía recuerdo:

  • El script rcs-to-cvs que se envía en el directory contrib de las fonts de CVS

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

  • El script rcs2cvs encontrado en un documento llamado "CVS-RCS-HOW-TO Document for Linux"

Consulte la página Interfaces Fronteras y herramientas en Wiki de Git, en "Herramientas", "Interacción con otros sistemas de control de revisiones", "Otro". Allí encontraría una descripción y un enlace a la secuencia de commands Ruby de rcs-fast-export ( gitweb ) de Giuseppe "Oblomov" Bilotta.

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

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 del 2011-01-12 y se encontró con esta porción 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| ... 

Acabo de encontrar esto, que funcionó bien para mí:

http://cynic.cc/blog/posts/migrate-from-rcs-to-git/

Solo tenga en count que "cvs-source-dir" en esa página debe ser una ruta absoluta.

OK, después de un pequeño retoque, encontré que era trivial convertir RCS a CVS. Los files están en el mismo formatting, por lo que simplemente se trata de mover los files a una raíz de CVS existente. Esto supone que tienes acceso a los files 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_ 

También tuve este problema y luché con cvs2svn, parsecvs y otras cosas. parsecvs consiguió el más cercano, pero Keith parece haberlo dejado atrás y ahora aparecen horquillas random. El problema que tuve fue que analizaría los files RCS sin problemas, pero lo último que hizo fue git rm el file, así que tuve que remendarlo con git reset para deshacer la eliminación.

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

Traté de agregar incrementalmente algunas cosas de treees separados de RCS, parece haber funcionado.