2010-07-23 14 views
9

Tengo una situación en la que tengo un repositorio CVS de edad avanzada, que nos gustaría convertir a git una vez por todas, manteniendo historial completo etc.¿La forma más robusta de convertir un repositorio de CVS que contiene proyectos de Eclipse a git?

Todas las carpetas en la raíz del repositorio contiene proyectos de Eclipse (liso o proyectos web dinámicos) que incluyen .classpath y .project. Usamos Team ProjectSets para verificar los proyectos que necesitamos para una tarea determinada (donde el conjunto del proyecto se ubica en el proyecto que contiene el principal, y el resto son proyectos de biblioteca).

Cuando Team ProjectSet está desprotegido, el espacio de trabajo está lleno.

Este enfoque ha funcionado bastante bien durante muchos años (excepto la parte del juego de proyectos que venía con 3.5), y nos gustaría trabajar de manera similar con git si es posible, pero no sabemos cómo.

He jugado un poco con git cvs import pero falló - probablemente debido a que no usamos módulos.

¿Cómo sugeriría que lo hagamos, y cómo deberíamos trabajar con git para permitir nuestro uso actual de proyectos de bibliotecas compartidas? ¿Tendríamos TENEMOS para presentar maven y crear módulos maven para nuestros proyectos de biblioteca? ¿O solo hormiga hiedra?


EDIT: ahora las he arreglado para convertir nuestro repositorio CVS a Subversion con una invocación cvs2svn adecuada y se encontró que Eclipse reconoce el depósito de la subversión que resulta muy bien. Por desgracia después de la clonación http://github.com/iteman/svn2git `e intentar ejecutar bin/svn2git consigo

[email protected]:~/cvsgit/svn2git/svn2git$ bin/svn2git 
bin/svn2git:35:in `initialize': wrong number of arguments (2 for 1) (ArgumentError) 
     from bin/svn2git:35:in `new' 
     from bin/svn2git:35 

Esto es con Ubuntu 10.04.1 LTS Server y lo he intentado varias cosas sudo con Ruby y sus gemas sin entender completamente lo que hice como No soy un programador de Ruby, así que puede haber estropeado un poco las cosas. Agradecería consejos, si lo más fácil es instalar otra variante de Linux para hacer la conversión, está bien.


EDIT:

https://help.ubuntu.com/community/Git http://css.dzone.com/articles/subversion-git-morning


Editar: Mi primer intento con el svn2git predeterminado completado con éxito (después de un tiempo), y me da un buen repositorio donde git branch -a informes más o menos

[email protected]:~/gitroot/svnroot$ git branch -a 
* master 
    remotes/XX64_DEPLOYED_CODE 
    remotes/Beta1 
    remotes/Beta2 
    remotes/SV46 
    ... lots more 

Estamos interesados ​​en poder verificar la rama SV46 y trabajar con ella (básicamente no nos importan las etiquetas, solo las ramas reales). Configuré gitosis y llevé este repositorio a gitosis, y lo cloné en otra computadora para averiguar cómo hacer el bit "trabajar con SV46" con Eclipse. QUE repositorio no sabe de todas las ramas:

[email protected] ~/git/git00 (master) 
$ git branch -a 
* master 
    remotes/origin/HEAD -> origin/master 
    remotes/origin/master 

¿Necesito un masaje en el resultado original de svn2git para obtener la información en el repositorio gitosis? ¿Necesito clonar con una discusión? ¿Debo volver a hacer el paso svn2git con la versión sugerida en lugar del envío con Ubuntu?

EDITAR: Resultó que la publicación del repositorio generado por svn2git con "git push --mirror" hizo que aparecieran cosas en el repositorio de gitosis. Ahora veo la siguiente gitosis interior (recortada):

[email protected]:/srv/gitosis/repositories/git01.git$ git branch -a 
* master 
    remotes/XX64_DEPLOYED_CODE 
    remotes/Basic_Beta1 
    remotes/Beta1 
    remotes/Beta2 
    remotes/SV46 
    ... lots more 
[email protected]:/srv/gitosis/repositories/git01.git$ git branch 
* master 
[email protected]:/srv/gitosis/repositories/git01.git$ git tag -l 
[email protected]:/srv/gitosis/repositories/git01.git$ 

intentar clonar este repositorio con git clone [email protected]:git01 -b remotes/SV46 o git clone [email protected]:git01 -b SV46 tanto me dicen que la rama remota no se encuentra aguas arriba de origen, utilizando CABEZA lugar.

¿Estoy ladrando el árbol equivocado?

+0

Ver también: http://stackoverflow.com/ques ciones/881158/is-there-a-migration-tool-from-cvs-to-git –

Respuesta

6

En primer lugar, el uso de submódulos para partes independientes de su repositorio Central VCS (es decir, su repositorio CVS) siempre es bueno (consulte "What are the Git limits?").
Eso significa que terminará con muchos repositorios Git independientes, es decir, "un conjunto de archivos que evolucionan de forma independiente unos de otros", razón por la cual existen submódulos.

Por lo tanto, se requieren varias importaciones de Git (en varios repositorios).

Pero desde git cvs import no es siempre a la altura, yo recomendaría:

  • cvs2svn el fin de obtener un repositorio SVN primero (sólo una cesión temporal)
  • svn2git el fin de convertir adecuadamente su SVN repo a uno Git (es decir, la transformación de las ramas de SVN en rama Git y etiquetas SVN en etiquetas Git)
+0

Gracias. Echaré un vistazo a los límites de Git en los próximos días y daré una oportunidad al "vía SVN" después de mis vacaciones. –

+0

cvs2svn fue muy bien, pero tengo problemas con svn2git. Por favor, mira mi edición de la pregunta. –

+0

@ Thorbjørn: 'svn2git' línea 35 es' migration = Svn2Git :: Migration.new (url, options) ', por lo que no debería simplemente ejecutar' svn2git', sino ejecutar 'svn2git url

Cuestiones relacionadas