Importar repositorio CVS a GIT (sourceforge a github) de manera facil

Requito Lucas
3 min readJan 21, 2019

--

Argentum Online Logo

Esto fue hecho para el proyecto Argentum Online Libre (http://www.argentumonline.org) el cual es una continuacion del trabajo realizado aqui https://sourceforge.net/projects/morgoao/

Argentum Online es un juego MMORPG bajo la licencia AGPL y fue creado por una variedad de personas a lo largo del tiempo desde 1999, esta desarrollado en Visual Basic 6, si bien el juego sigue desarrollandose mediante muchos “mods” los encargados de los mismos no respetan la licencia (AGPL) durante los ultimos 8 años no se libero ninguna linea de codigo (la ultima liberada fue en 2011 cuando hoy estamos en 2019) por lo que se decidio darle un aire nuevo a esto y al menos dejar todo acomodado para que cualquier persona que quiera poder ver como esta hecho el juego o agregarle contenido sea libre de hacerlo.
Se utiliza una filosofia totalmente open-source y cualquiera esta invitado a enviar Pull Requests a los distintos repositorios.

Organizacion de github:
https://github.com/ao-libre

Empezamos con la importacion de CVS a GIT

Descargamos una copia local del repositorio de CVS que estan en sourceforge de la siguiente forma (recordar que CVS no es descentralizado como GIT):

rsync -av rsync://PROJECT.cvs.sourceforge.net/cvsroot/PROJECT/\* cvs

Con este comando deberian tener una carpeta llamada cvs con todos los repositorios de sourceforge.

Descargamos el programa cvs2git
http://cvs2svn.tigris.org/cvs2git.html

Comando para crear archivos con formato “fast-import” para usarlo luego:

/Users/lucas/cvs2svn-trunk/cvs2git \
— blobfile=cvs2git-tmp/git-blob.dat \
— dumpfile=cvs2git-tmp/git-dump.dat \
— username=cvs2git — fallback-encoding utf8 \
~/morgoao/AOSetup

Creamos un repositorio con el comando:

mkdir repositorio
cd repositorio
git init

Importar historial CVS a GIT con la herramienta fast-import de git

cat ../cvs2git-tmp/git-blob.dat ../cvs2git-tmp/git-dump.dat | git fast-import

Luego agregamos el repositorio de Github al cual pushear

git remote add origin git@github.com:ao-libre/ao-player-morgoao.git
git push origin master

Cambiar autoria de los commits:

Con este comando vemos todos los autores que hay en el repositorio:

git shortlog |egrep ^\\w

Para cambiar la autoria de los commits, deben poner el usuario y email que estan usando los autores en github actualmente (tienen que buscarlos por internet o contactarlos de alguna forma manualmente), deben hacer esto por cada autor.

git filter-branch — env-filter ‘if [ “$GIT_AUTHOR_NAME” = usernamegithub ]; then
GIT_AUTHOR_EMAIL=usernamegithub@domain.com
GIT_AUTHOR_NAME=usernamegithub;
GIT_COMMITTER_EMAIL=$GIT_AUTHOR_EMAIL;
GIT_COMMITTER_NAME=”$GIT_AUTHOR_NAME”; fi’ — — all

Si aparece el mensaje:

Cannot create a new backup.
A previous backup already exists in refs/original/
Force overwriting the backup with -f

Usar el comando:

rm -rf .git/refs/original

Y listo ya tenemos la conversion hecha.

— — — — — — — — — — — — -

Suponiendo que ya empezamos a trabajar en algun repositorio sin antes hacer la conversion y ahora deseamos poner todo el historial de trabajo del CVS a nuestro actual repositorio tenemos que hacer un `git rebase` en el repositorio en el cual estamos usando de la siguiente forma:

Suponiendo que cvs2gitao.git es el repositorio en el cual creamos la conversion anteriormente.

git remote add morgoao git@github.com:RecoX/cvs2gitao.git
git fetch morgoao
git rebase -X theirs morgoao/master

Notese que `theirs` es lo opuesto que se puede pensar ya que es el repositorio en el cual estamos parados y no el que vamos a mergear.

En caso de haber conflictos con el mergeo solo hagan lo siguiente por cada conflicto:

git add .
git rebase -continue

Y listo ya tienen la importación de todo el historial a su actual repositorio hecha.

Fuente:

http://olegp.name/howto/convert-sourceforge-cvs-to-git/
(la fuente citada usa la herramienta git cvsimport la cual es obsoleta y no esta mas en git)

--

--