2010-03-23 13 views
9

Como profesional independiente, a menudo trabajo en empresas que usan repositorios de Subversion.¿Puedo usar Mercurial localmente y actualizar desde/push a un repositorio de Subversion?

Sería útil si pudiera usar Mercurial para obtener el código de estos repositorios, rastrear mis cambios cuando estoy fuera de línea, y luego confirmar todos mis cambios locales en el servidor Subversion de la empresa cuando vuelva a estar en línea.

¿Funciona? ¿Has leído algún buen tutorial sobre los detalles?

+0

pregunta similar aquí: http://stackoverflow.com/questions/799860/ using-mercurial-local-only-with-subversion-server. Considero que mi pregunta debería permanecer también; esta es una de esas preguntas que pueden redactarse de muchas maneras diferentes. –

+0

Aaaand this one: http://stackoverflow.com/questions/826938/interoperation-between-mercurial-and-subversion –

+0

Aquí está la misma pregunta en Kiln Overflow, o como se llame: http://kiln.stackexchange.com/ questions/948/can-i-use-mercurial-local-and-update-from-push-to-a-subversion-repository/950 # 950 –

Respuesta

5

Probar HgSubversion. Te permite hacer exactamente eso. Puede clonar un (parte de) el repositorio svn localmente en un repositorio hg y trabajar con hg localmente y svn remotamente (presionar y tirar hacer lo que se esperaría de ellos).

Lo he usado con cierto éxito en el pasado, pero no tengo una amplia experiencia en él.

2

Puede encontrar información sobre este wiki page.

8

Estoy trabajando en una empresa que está utilizando CVS, por lo que HgSubversión no era una opción. Tenía la misma pregunta hace unos días y ha desarrollado un flujo de trabajo basado en esto:

http://momentaryfascinations.com/programming/how.to.use.mercurial.for.local.source.code.management.with.a.public.subversion.server.html

he creado un repositorio de Mercurial en mi repositorio CVS es, que me trato como "sólo lectura". Luego clono este repositorio hg "de solo lectura" en repositorios que funcionan, donde realizo cambios/correcciones localmente. He estado clonando el repositorio para cada característica y arreglo que hago, pero también podría tener solo un repositorio y usar una estrategia de ramificación diferente para administrar su desarrollo. Aquí está a good overview de tales estrategias.

La clave de este flujo de trabajo es tener ese repositorio de "solo lectura". Solía ​​hacer mis cambios en el primer repositorio de Mercurial que creé, que estaba en la parte superior de CVS. Esto funcionó, pero se volvió confuso al actualizar desde CVS. Al tener esta capa adicional, puede encargarse de hacer sus propios cambios y actualizaciones de CVS por separado.

Teniendo en sincronía con CVS

Siempre que hay cambios en el CVS, hago una actualización de cvs. Para el repositorio hg "readonly", esto aparecerá como archivos modificados. Para sincronizar Mercurial, yo simplemente hago un

hg ci -m "Updated from CVS." 

(Por lo tanto, verá una gran cantidad de esos mensajes en los registros de mi hg). En este punto, mi repositorio de "solo lectura" está sincronizado con CVS. Ahora puedo ir a cualquiera de los repositorios que he clonado y emitir un hg pull y luego hg update para sincronizarlos.

confirmar los cambios de hg volver a CVS

En la otra dirección, cuando quiero que se comprometan a CVS, Voy a entrar en uno de mis repositorios de trabajo donde me he comprometido mis cambios ya hg . Luego I hg push mis cambios vuelven a "readonly", saltan al repositorio "readonly", hagan un hg update. Desde la perspectiva de CVS, esto aparecerá como recién modificado. Luego hago un cvs commit de nuevo en CVS. Aquí tendré que repetir/resumir en mi mensaje de registro el trabajo que he hecho en mi repositorio de hg.

Es cierto que hay puntos difíciles en este flujo de trabajo.Podría hacer múltiples cambios en hg, que suman solo un cambio en CVS/SVN, de modo que el historial no se mantendrá en CVS/SVN, y tendrá que resumir sus mensajes de confirmación. Tienes que administrar manualmente mantener CVS y tu repositorio de "solo lectura" sincronizados. La ventaja de esto es que no necesita instalar extensiones adicionales; solo está tratando con los archivos desde ambas perspectivas. Todo lo que está sucediendo es bastante transparente y bajo tu control.

Todavía estoy cortando los dientes en hg, pero hasta ahora este flujo de trabajo ha estado funcionando razonablemente bien.

Harvey ha proporcionado un diagrama agradable de esto y hace un excelente punto de que este flujo de trabajo se aplica a cualquier otro VCS:

alt text http://sr105.com/other_vcs_to_hg_workflow.png

+1

"Estoy trabajando en una empresa que está utilizando CVS" - ¡Ay! –

+3

@bentsai: Esta es una buena explicación de, probablemente, la forma más básica de usar mercurial con * cualquier * otro VCS. Bueno para los consultores. Necesita un diagrama. – Harvey

+2

Diagrama que podría poner en su respuesta: http://sr105.com/other_vcs_to_hg_workflow.png – Harvey

Cuestiones relacionadas