por - recuperar rama eliminada git
Migrar de CVS a Git sin perder historial (4)
Necesito saber si hay una forma de migrar mi código del control de fuente de CVS a Git?
En caso afirmativo, ¿qué pasa con mi historial de compromisos?
Este es el proceso que utilicé para migrar un repositorio SourceForge CVS a Git usando cvs2git (la última versión estable está aquí , pero IIRC usé la versión dev de github), que funciona en Windows y Linux sin ninguna compilación requerida ya que solo es Python:
# How to import from sourceforge CVS to git.
# First, you need to download/checkout the cvs repo with the whole history (not just checkout the HEAD/Trunk):
rsync -av rsync://PROJECT.cvs.sourceforge.net/cvsroot/PROJECT//* cvs
# then use cvs2git (python script, works on all platforms, no compilation needed):
python.exe cvs2git --blobfile="blob.dat" --dumpfile="dump.dat" --username="username_to_access_repo" --options=cvs2git.options --fallback-encoding utf-8 cvs
# this should have generated two files blob and dump containing all your cvs history. You can open them in a text editor to check that the content seems correct.
# then initialize your git repo inside another folder:
mkdir gitexport/
cd gitexport
git init
# then load up the exported cvs history onto git:
cat ../cvs/{blob,dump}.dat | git fast-import
# and then place the git commit cursor at the end of history:
git reset --hard
# finally and optionally, you can push to your remote git repository:
git push -u origin master
# of course you need before to git remote add origin https://your_repo_url
Nota: cvs2git.options es un archivo de configuración formateado JSON para cvs2git en el que puede especificar transformaciones para varias cosas, como nombres de autor (para que sus apodos se transformen automágicamente en su nombre completo después de la importación). Consulte la documentación aquí o el archivo de opciones de ejemplo incluido .
Además , no necesita tener el repositorio con este método, puede migrar proyectos de SourceForge que no le pertenecen (solo necesita el derecho de pago, por lo que esto funciona en cualquier repositorio público).
Puede usar git-cvsimport
para importar su repositorio de CVS en Git. Por defecto, esto revisará todas las revisiones, brindándole un historial relativamente completo.
Dependiendo de su sistema operativo, puede necesitar instalar soporte para esto por separado. Por ejemplo, en una máquina Ubuntu necesitarías el paquete git-cvs
.
Esta respuesta entra en más detalles.
Recientemente reposurgeon de Eric Raymond (2016) para importar un repositorio de CVS de sourceforge a git. Me sorprendió muy gratamente y funcionó muy bien. Después de las experiencias pasadas con cvs2svn y otras herramientas, recomiendo sin dudas reposicionar para este tipo de tareas.
Eric ha publicado una guía de migración directa here
Personalmente, no he hecho una conversión de CVS a Git, pero creo que la herramienta cvs-fast-export
Eric Raymond es la herramienta a utilizar. Él tiene la página del hombre publicada here . cvsps
es otra herramienta mantenida por Eric, pero recientemente ha sido desaprobada a favor de cvs-fast-export
. cvs2git
es otra herramienta que se basa en la misma maquinaria que cvs2svn
. Este último era extremadamente hábil, así que tengo grandes esperanzas de que cvs2git
sea igual de bueno.
Una cosa a tener en cuenta: CVS es un RCS bastante roto. Es posible que pueda tener contenido que no se pueda reflejar exactamente en Git. IOW, hay una cierta impedancia de desajuste allí, pero las herramientas se esfuerzan por preservar tanto como sea posible. Asegúrese de verificar su conversión y de que está contento con los resultados. Es posible que necesite arreglar parte del historial de Git para obtener algo más aceptable, pero dudo que lo necesite.