tortoise tag entre diferencia create crear branches svn mercurial dvcs hgsubversion

entre - svn tag



Enviar cambios de Hg de nuevo a SVN (3)

Acabo de encontrar un problema similar, que básicamente era:

  • clonando un repositorio SVN con HgSubversion
  • resolviéndolo con algunas combinaciones
  • tratando de tirar de nuevo al antiguo repositorio SVN

y se encontró con el terrible Sorry, can''t find svn parent of a merge revision mensaje de Sorry, can''t find svn parent of a merge revision .

Eso es lo que hice para arreglarlo sin demasiada molestia:

  1. Descarga TortoiseSVN desde este enlace e instálalo.
  2. Desproteja el repositorio de SVN en una nueva carpeta con el comando SVN Checkout... en el menú contextual del Explorador de Windows (haga clic con el botón derecho para acceder).
  3. Copie el contenido de la carpeta HG local (excluyendo solo la subcarpeta .hg ) en la carpeta SVN recién creada, sobrescribiendo todos los archivos.
  4. Haga clic derecho en esa carpeta y haga SVN Commit...
  5. Deshaga su repositorio HG y retírelo del repositorio SVN ahora actualizado.

Tarda 2 minutos y todo debería empezar a funcionar de nuevo. Perderá algo de información de fusión y confirmación, pero no debería ser un problema ya que el combo SVN / HgSubversion no puede rastrearlos de todos modos.

He empezado a trabajar en un repositorio SVN. He clonado una subcarpeta de este en un repositorio local de Hg con el hg clone .

Luego, quería compartir esto con un colega que no tiene acceso al repositorio de SVN. He creado un repositorio privado de BitBucket, y ocasionalmente impulsamos los cambios y, por lo tanto, tuve que retirarlos.

hgsubversion hace algunas cosas desagradables a los conjuntos de cambios, como cambiar su comunicador (y creo que incluso el hash). Cuando intenté empujar y jalar al repositorio de BitBucket, tuve que hacer una fusión.

Ahora no puedo reenviar los cambios en el repositorio de Subversion debido a nuestro querido amigo, abort: Sorry, can''t find svn parent of a merge revision. .

¿Cómo podría uno extraer el repositorio de Mercurial que apunta a BitBucket con el repositorio de Mercurial que apunta a svn, mientras se mantiene compatible con hgsubversion (es decir, sin importar las revisiones de fusión)?

Por supuesto, se agradecería alguna forma automatizada de hacer esto, pero si no existe una manera fácil de hacerlo, le agradecería cualquier solución.

Yo uso hgsubversion , no hgsvn ; es decir, la extensión en la que se hace hg clone svn://repo/url . Estoy abierto a cambiar, sin embargo, si es necesario.


Cuando utiliza Mercurial en un repositorio de subversión, aún debe pensar como lo hace SVN, por lo que muchas de las funciones que forman parte del flujo de trabajo básico de Mercurial no funcionarán. Fusionar la forma en que mercurial lo hace es imposible en un depósito svn. Si ha fusionado su trabajo con la rama svn extraída, recibirá el infame mensaje que recibe ahora :(

Le sugiero que lea la respuesta de durin42 a esta pregunta .

EDITAR: Para salir de su desorden actual, le sugiero que cree un parche (o una serie de parches) desde el punto en el que realizó el pago desde el repositorio de SVN. Obtenga una nueva copia nueva del repositorio de subversion y aplique los parches. No estoy seguro de que puedas hacerlo desde tu repositorio actual. Podrías explorar el comando hg diff.

hg diff -g -r tip -r XXX > patch

siendo XXX tu pago SVN original (todavía no lo he probado).


Sí, hgsubversion cambia el nombre del remitente porque debe reflejar el nombre asignado por Subversion. Hgsubversion también debe cambiar el hash de conjunto de cambios. En realidad, no es algo que hgsubversion puede decidir: está integrado en el diseño de Mercurial que el hash de conjunto de cambios se basa en toda la información del conjunto de cambios y que incluía el nombre del comunicador.

Lea mi guía de hgsubversion para obtener información sobre cómo trabajar correctamente con hgsubversion. Los puntos importantes que se deben recordar es que hgsubversion convierte a hg en un mejor svn , pero aún es Subversion el maestro. Esto significa que debe linealizar su historial antes de volver a subversión a Subversion para que no se fusione u otras cosas divertidas de DVCS.

Si desea aprovechar las funciones distribuidas en Mercurial, hágalo en pequeñas iteraciones: haga una colaboración en Mercurial, linealice los conjuntos de cambios y vuelva a Subversion, destruya la parte no lineal de sus clones, extraiga de Subversion. A continuación, puede repetir con nuevas iteraciones de colaboración en Mercurial.