¿Consejos para actualizar CVS a git / hg?

Todavía usamos CVS, utilizo git y hg para mi uso personal, aunque sigo siendo novato en ambos, pero me doy count de que son mucho más modernos y mejores, más rápidos, más distribuidos, etc.

Es solo que todos están tan acostumbrados a CVS que creo que podría popup una gran cantidad de problemas si tuviera que ser el que recomendara y realmente hiciera la actualización / portabilidad / transición de nuestro server CVS actual a git o hg.

¿Alguien ha hecho esto recientemente? ¿Podría ofrecer alguna información o consejos sobre cómo influir en las personas para que usen git / hg, y solo consejos generics sobre la actualización / transición real si se llevara a cabo? ¿Hay problemas comunes de los que debería estar al tanto solo en general?

No estoy seguro si está buscando una guía general sobre migration o una comparación completa de los dos services, pero aquí está el primero .

EDITAR

Como SVN fue mencionado aquí, es una excelente guía que he usado en algunas migraciones de SVN a Git.

EDITAR

Me encontré con este gran sitio, ¿Por qué Git es mejor que X ? , pensé que lo agregaría a esta respuesta para otras personas que estén pensando en cambiar a Git para el control de versiones.

Acabo de encontrarme con esta pregunta, y he trabajado en algún lugar que intentó hacer esta transición. No funcionó.

No digo esto para desalentar a nadie, sino para resaltar los problemas que la gente puede encontrar.

Los problemas fueron numerosos, pero básicamente todos se networkingujeron al hecho de que la gente no veía los problemas con CVS. Asombroso lo sé, pero había estado allí por tanto time. Se habían acostumbrado a las idiosincrasias y ahora estaban ciegos a los problemas que les causaba. Trae algo nuevo y no pueden entender por qué las cosas deben hacerse de otra manera.

Uno de los más grandes fue la noción de un compromiso atómico. La gente no podía pasar el hecho de que las revisiones ahora eran un estado de todo el tree del proyecto, en lugar de un estado de un file. Por lo tanto, comprobar un cambio en el file A mientras hubo cambios sin terminar en el file B repente se convirtió en una plataforma para una queja contra el sistema de control de versiones.

  • Waaaaaaa! ¿Por qué tengo que verificar todos los files?
  • Waaaaaaa! ¿Por qué no tengo los cambios que acabo de sacar?
  • Waaaaaaa! ¿Qué quieres decir con que debo fusionarme? ¿Por qué siempre tengo que fusionarme?
  • Waaaaaaa! ¿Por qué no puede simplemente usar un número de revisión normal?

Cuando está tropezando en ese nivel, puede olvidarse de intentar introducir conceptos "avanzados" como comprometerse con más frecuencia que cuando desea liberar el código o compartir los cambios entre los usuarios.

El golpe mortal fue el hecho de que habían tomado un gran proyecto, con cientos de desarrolladores y alnetworkingedor de 70 subproyectos, y lo colocaron en un repository centralizado. Esto significaba que este repository central recibía 1-2 cientos de compromisos por día. Todo el mundo siempre estaba presionando cada compromiso (porque cvs commit == commit; push right?). También obtuvo grandes informes automatizados de compilation y testing comprometidos con él. Ponlo todo junto y llegó a la etapa en la que no podías hacer un pull;merge;(no testing);push y pull;merge;(no testing);push sin necesidad de volver a pull;merge porque no estabas actualizado. Alguien había empujado algo mientras esperabas que terminara ese gran tirón.

… y porque las personas no estaban probando sus fusiones, las roturas ocurrieron.

  • Waaaaaaa! ¡Maldita cosa lo combinó mal!

Ah, y un chico se fusionó alnetworkingedor de 10 twigs porque sabía que tenía que fusionarse, pero no entendía qué fusionar o por qué.

El resultado … Compraron Perforce.

Motivo: vino con un contrato de soporte, entonces había alguien a quien [culpar / arreglarlo] cuando salió mal.

Asi que:

  • Eduque a las personas sobre los problemas que CVS les está causando. Normalmente, no se puede identificar qué versiones de files funcionan juntas sin labelr, lo que requiere que todos dejen de trabajar. Estoy seguro de que puedes encontrar más.
  • Eduque a las personas sobre por qué los DVCS funcionan de la manera en que lo hacen. Muéstreles lo que el poder significa que pueden hacer. Hazlos querer.
  • ¡Asegúrate de que sepan qué no hacer!
  • No solo cambie los sistemas y haga que todos aprendan en el trabajo. Simplemente crea resentimiento y todo lo que hacen es intentar hacer lo que funcionó en el sistema anterior. No es lindo.
  • No pongas cada proyecto en un solo repository. Los VCS centralizados lo manejan mucho mejor que los DVCS y lo perderás todo el time.

Si puedes, tráelo despacio en un proyecto con un pequeño número de desarrolladores. Educarlos; configurarlo bien; hacerlos evangelists para el rest de la compañía. Se correrá la voz y todos querrán esta nueva herramienta, porque "¿por qué el equipo de Bob obtiene nuevas herramientas cuando trabajamos con CVS? ¿Se da count de todos los problemas que tenemos a causa de eso? "

Quizás esta pregunta de StackOverflow (y sus respuestas) sería de ayuda:

  • Diferencia entre GIT y CVS

Estoy pasando por esto en este momento, así que voy a agregar mis 2 centavos (tarde al juego).

Estoy a cargo de guiar a nuestro equipo fuera de CVS hacia Subversion, Mercurial o Git. La experiencia de su equipo, su (s) proyecto (s) y sus metodologías de lanzamiento probablemente cambiarán la respuesta que brinde. Para la divulgación, mi equipo trabaja en una serie de pequeños proyectos de Java y usa Netbeans IDE y Maven para desarrollar y lanzar software.

Subversión

Sí, lo siento, está un poco fuera de tema, pero sigue siendo una actualización definitiva de CVS. Conseguirá compromisos de proyectos atómicos, una amplia base de usuarios existente y algunas buenas herramientas comunitarias. Es probablemente la transición más fácil con el menor entrenamiento necesario, pero definitivamente no tienes el poder de DVCS. Recomiendo la herramienta cvs2svn .

Mercurial

Mercurial tiene una gran documentation, incluso para algunos de los casos de uso más extraños. Es fácil girar un repository. Fácil de instalar (solo use Python, setup-tools, y 'easy_install mercurial'). Fácil de convertir a, y los desarrolladores que odian la command-line obtienen la gran herramienta TortoiseHg de la caja.

Encontré la herramienta cvs2hg mucho más precisa en la conversión que la extensión integrada 'hg convert', pero ymmv.

Para enseñar a todos hg, testing el sitio de Joel: HgInit . Hay muchos libros y tutoriales en línea, pero conseguir que todos se acostumbren a empujar y tirar (y cómo se relaciona con el process de lanzamiento) va a ser la parte más loca. Personalmente considero preferible este model push / pull de DVCS, pero otros pueden estar en desacuerdo. Es prácticamente como obligar a todos a ramificar cada pieza en la que están trabajando.

Al decidir si ir con el subrepo o simplemente combinar todo en un gran repository, opte por el único repository. Tratar con múltiples subrepo resultó ser un poco molesto por tener solo un repository con historial entremezclado. (Su list de proyectos y cómo interactúan afectará esta decisión en gran medida). Sus herramientas de IDE y GUI ayudarán a superar parte de esa rareza. Después de la conversión, revise cada twig y sepa qué esperar. El intercambio en una sucursal ya no significa que obtendrá unos pocos files modificados. Significa que todo lo que no fue ramificado no existe.

Git

Realmente terminé sorprendiéndome de lo mucho que me gustaba esta herramienta. La integración de nuestro IDE fue mejor, la herramienta fue más rápida que hg (en mi experiencia), y fue más fácil configurar cosas como repositorys ssh.

La installation, la conversión y la configuration fueron un oso. Al final, decidí que esta parte valía más que el esfuerzo requerido. Según esta pregunta, la herramienta 'git cvsimport' se rompe en proyectos de CVS más grandes. Además, mi herramienta de conversión para ir : cvs2svn necesita urgentemente ayuda para mejorar la funcionalidad de Git. Después de calcular todo ese negocio blob / dump-file-then-import-to-bare-git-repo, descubrí que se olvidó de recoger todas mis sucursales de CVS. Quizás nunca entendí las herramientas lo suficientemente bien, pero la forma más segura de pasar de CVS a Git parece ser a través de SVN.

Además, hay muchos buenos arguments en contra de DVCS, como el problema de que cada desarrollador camine con todo el repository. Si alguna vez empujas un jojo malo y se tira, será un gran dolor eliminarlo.


Para hospedar un repository http, eche un vistazo a scm-manager y RhodeCode . RhodeCode es más difícil de configurar, pero tiene mucha más funcionalidad. Ambas herramientas son difíciles de usar con subrepos, así que prepárate para eso.

En cuanto a convencer a tu jefe. Lo hice acuñando el término "CVS-surgery". Al igual que cualquier otra cosa, haga un seguimiento de todo el time que está perdiendo al volver atrás a través de CVS y corregir los errores de confirmación / restitución. A continuación, presente su caso como "Tendría X horas de mi time gratis ahora si simplemente convirtiéramos a esta herramienta". Encontré volver a una confirmación sin labelr en CVS, confirmaciones a nivel de file y la dificultad que implicaba encontrar qué cambios de twigs estaban teniendo lugar en los problemas más importantes con CVS.