version-control mercurial branch hgsubversion

version control - Cómo manejar fusiones con hgsubversión?



version-control mercurial (3)

Mercurial como algunos modos de ramificación diferentes: http://stevelosh.com/blog/2009/08/a-guide-to-branching-in-mercurial/

El que está describiendo es ''ramas nombradas'', que es el más popular cuando se trabaja con un repositorio al que se accede únicamente a través de mercurial (o hg-git).

Sin embargo, cuando usa hg-subversion para que esté presionando cambios hacia / desde la subversión, que solo nominalmente tiene ramas, es mejor que mantenga todos sus cambios mercuriales en la rama con nombre ''predeterminado'', y usando el patrón de "clones y ramas" (que prefiero de todos modos).

Específicamente, ese mensaje Sorry, can''t find svn parent of a merge revision. no es un descendiente de una revisión que tiene una coincidencia directa en la subversión.

Si fuera usted, me reclinaría de svn, y luego movería mi trabajo a la rama ''predeterminada'' de ese repositorio con el comando ''trasplante'' (extensión empaquetada). Si quieres funciones múltiples en paralelo con subversión hg, utiliza clones separados (son muy baratos), ya que está más en línea con la forma en que subversión piensa en las ramas.

Intento contribuir a un proyecto que usa Subversion. Usé Mercurial y su extensión hgsubversión para clonar el repositorio. Mi trabajo tiene lugar en una rama de características.

¿Cómo mantengo la rama de características actualizada con las cosas que suceden en la rama predeterminada (hg speak) también conocido como trunk (svn speak)?

Así que usé hg up feature para actualizar a la rama de características, luego hg pull que me dio changesets en la rama predeterminada. Así que hg merge default , commit the merge, luego intenté hg push para enviar mis changesets a Subversion. Y Mercurial dijo: "Lo siento, no puedo encontrar el padre svn de una revisión de fusión".



Finalmente descubrí cómo hacer que mi repositorio no esté encajado después de un evento como el descrito en la pregunta, de modo que pueda seguir trabajando sin tener que volver a clonar el repositorio principal (lo cual es, obviamente, una operación bastante lenta cuando están sacando de Subversion!). Si la "punta" de Subversion te deja atrás para que no puedas empujar más, solo asegúrate de tener activada la extensión "rebase" en tu Mercurial a través de una línea $ HOME / .hgrc como esta:

[extensions] rebase =

Y luego deberías poder ejecutar este comando cuando tu repositorio quede encajado:

$ hg rebase --svn

Si entiendo esto correctamente, disuelve tu rama actual que te ha alejado de Subversion HEAD, y la reconstruye encima de la rama "tip" en Mercurial que corresponde a HEAD en Subversion. A partir de ahí, puede seguir trabajando y hacer empujes de nuevo con éxito. Siempre me ha funcionado hasta ahora; ¡Déjame saber si surge algún problema!