¿Migrar proyecto de RCS a git?
Pregunta
Tengo un proyecto de 20 años de antigüedad que me gustaría migran de RCS a git, sin perder la historia. Todas las páginas web sugieren que el único camino verdadero es a través de CVS. Pero después de una hora de buscar en Google y probar diferentes scripts, todavía tengo que encontrar algo que exitosamente convierta mi árbol de proyectos RCS a CVS. Espero que la buena gente en Stackoverflow sepa lo que realmente funciona, a diferencia de lo que se dice que funciona y no.
(Busqué en Stackoverflow utilizando tanto la búsqueda SO nativa como la búsqueda en Google, pero si hay una respuesta útil en la base de datos, la perdí).
ACTUALIZACIÓN : la herramienta rcs-fast-export
en http://git.oblomov.eu/rcs-fast-export se reparó el 14 de abril de 2009, y esta versión parece funcionar para mí. Esta herramienta convierte directamente a git sin CVS intermedio. Gracias Giuseppe y Jakub !!!
Cosas que no funcionaron que aún recuerdo:
-
El script
rcs-to-cvs
que se envía en el directoriocontrib
de las fuentes 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 para Linux "
Solución
Consulte la página InterfacesFrontendsAndTools en Git Wiki, en " Herramientas " ;, " Interacción con otros Los sistemas de control de revisión " ;, " Otro " ;. Allí encontrará una descripción y un enlace a rcs-fast-export ( gitweb ) guión de Ruby por Giuseppe " Oblomov " Bilotta.
(La búsqueda en la web también encontrará la página y el anuncio de Ohloh para el proyecto mencionado) .
Otros consejos
Como regla general, debe tener cuidado con los scripts que ejecuta. Para RCS - > Puede que le convenga má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 corrí a través de 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|
...
Bien, después de un poco de retoques, descubrí que era trivial convertir RCS a CVS. Los archivos están en el mismo formato, por lo que es simplemente una cuestión de mover los archivos a una raíz CVS existente. Esto supone que tiene 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_
Encontré esto, lo que funcionó bien para mí:
http://cynic.cc/blog/posts/migrate -desde-rcs-to-git /
Solo observa que " cvs-source-dir " en esa página debe ser una ruta absoluta.
También tuve este problema y luché con cvs2svn, parsecvs y todo eso.
parsecvs fue el más cercano, pero Keith parece haberlo dejado atrás y ahora están apareciendo opciones aleatorias . El problema con el que me topé fue que analizaría los archivos RCS muy bien, pero lo último que hizo fue git rm
el archivo, así que habría tenido que revolcarme con git reset para deshacer la eliminación.
Luego descubrí el convert
de mercurial:
https://www.mercurial-scm.org/wiki/ConvertExtension
¡Problema resuelto!
Intenté agregar de manera incremental algunas cosas de árboles RCS separados, parece que ha funcionado.