2011-03-24 6 views
7

He encontrado lo que parecen ser preguntas muy similares aquí en SO, con lo que parecen ser buenas respuestas; pero por alguna razón, todavía no puedo entender cómo hacer que esto funcione. Mi preocupación es que simplemente no puede ser posible.Usando Hg localmente y presionando a un repositorio SVN cuando otros miembros del equipo están trabajando en SVN, ¿es esto posible?

Aquí está la situación: estoy trabajando en un pequeño equipo que utiliza un repositorio SVN central como nuestro sistema de control de versiones. Mi par de programadores y yo nos frustramos por no tener la opción de confirmaciones locales (y no queríamos tener que pasar por la molestia de usar las ramas de SVN), así que buscamos usar Git o Mercurial como un cliente SVN y encontramos que hgsubversión parece capaz de hacer lo que queremos: trabajar localmente en un repositorio de Hg, comprometerse localmente, y solo presionar a SVN cuando estemos listos.

Cuando llegó el momento de empujar, hemos recibido este mensaje de error de Hg:

Sorry, can't find svn parent of a merge revision. 

Me pregunto si el problema es que tuvimos que tirar de los cambios de SVN para obtener actualizaciones de nuestros compañeros de equipo, a continuación, fusionarse con nuestros cambios locales, y ahora Hg no puede entender cómo hacer que SVN sea feliz. Este parece ser el mensaje que recibo de las otras preguntas de SO & respuestas que he visto; sin embargo, el consejo que se dispensó en esos casos (haciendo hg rebase --svn) tampoco parece funcionar para nosotros; ese mismo mensaje "no se puede encontrar el padre svn" se da.

¿Esto es posible? ¿O es más problemático de lo que vale cuando otros desarrolladores en el equipo están haciendo cambios directamente a SVN?

+0

Como mencionaste Git ... utilizo git-svn regularmente para interactuar con los repositorios de Subversion. Puedo interactuar con otros ya sea a través de SVN o directamente a través de Git, y no tengo problemas para volver a subir las cosas a Subversion (después de volver a basar). No he usado el conector hg-svn para comparar. –

+0

No puede insertar hg fusiona en svn. Debe transformar su repo de Hg en un historial de versiones lineales. http: // stackoverflow.com/questions/5336192/steps-needed-to-allow-hgsubversion-svn-clone-to-push-back – Rudi

Respuesta

5

El problema es que hgsubversión no puede impulsar las fusiones de Mercurial a Subversion. Siempre que no cree ningún conjunto de cambios de combinación, todo debería funcionar bien. (FWIW Subversion se combina bien, ya que hgsubversion simplemente ignora la información de combinación y crea conjuntos de cambios regulares, monoparentales.) El problema que está describiendo es una de las limitaciones conocidas de hgsubversion; otros se enumeran en hg help subversion.

Para evitar esto, es posible que desee considerar el uso de la extensión rebase para garantizar que el historial de inserción sea perfectamente lineal.

6

He estado haciendo esto por más de un año y funciona muy bien. Me encanta dulce, dulce amor DVCS y el resto de la gente, eh ... no. Yo uso hgsubversion como mi puente. Tuve bastantes problemas con hg-svn. YMMV.

¡Utilicé this para obtener configuración y la he estado amando desde entonces!

La advertencia es que no se puede usar Mercurial para combinar cambios entre sucursales. Todavía se puede trabajar en la rama (uso hg up [some-branch]), pero cuando llega el momento de fusionarlo en el tronco, necesitará comprometerse, empujar a some-branch, a continuación, utilizar la subversión de fusionar some-branch en el tronco.

He preparado una publicación de blog que describe este procedimiento en detalle. Puede verlo aquí: http://xinmyname.tumblr.com/post/11305033055/subversion-mercurial-branches-oh-my

¡Buena suerte!

+1

Andy, me gusta su sugerencia sobre cómo lidiar pragmáticamente con la bifurcación entre Hg y SVN. ¿Podría proporcionar más detalles de cómo hacer esto como esto en detalle? Quiero hacer esto (SVN es mi proyecto upstream donde tengo un conjunto de cambios que deseo aplicar pero el gatekeeper quiere que me presente en una rama SVN diferente antes de que lo acepte y lo fusione en el tronco SVN). Entonces actualmente cloné el tronco de SVN con hgsubversion. ¿Debo primero crear una rama con SVN directamente? Y luego use hgsubversion para clonar esta rama, que luego sería donde mis commits irían más tarde. –

+0

Sí, me gustaría tener más detalles también. Intento usar hg mientras todos los demás están en SVN, pero parece inútil si no puedo tener diferentes ramas localmente. Lo que parece es que es posible que tenga que presionar manualmente los cambios en las ramas de hg. Todos los cuidados de SVN son una historia lineal, ¿verdad? si no estoy listo para comprometerme con SVN, ¿puedo tener múltiples ramas detrás de escena? Fui con marcadores esta vez, pero no estoy seguro de que eso sea lo que realmente quiero. – nportelli

+0

Supongo que sería una publicación digna de blog, ¿eh? Trataré de arreglar algo esta tarde y publicar un enlace. Y sí, tienes que volver a enviar manualmente los cambios a SVN. Al menos, por lo que sé. ¿Quizás alguien sepa una mejor manera? –

Cuestiones relacionadas