2010-07-09 9 views
11

Estoy usando Mercurial 1.6. Tengo un repositorio con algunos subrepos (11). Me gustaría enviar el repositorio principal al repositorio remoto predeterminado sin presionar el repositorio secundario. Razones para querer hacer esto incluyen:Empujando el repositorio mercurial sin empujar los subrepos

  • Estoy usando repositorios SSH, y lleva mucho tiempo establecer una conexión y no empujar nada a cada uno de los subrepos.
  • Tengo confirmaciones en subrepos que no quiero que se propaguen a los repos remotos (aún).
  • Subrepos tienen ramas nombradas que no se deben propagar a los repos de repote (y aparentemente no hay forma de pasar nombres de ramas a la operación de inserción de los subrepos).

Sin embargo, no he podido encontrar la manera de lograrlo. Traté de eliminar el contenido de .hgsub y .hgsubstate (sin confirmar), pero aún así mercurial insiste en presionar los subrepos.

¿Cómo puedo enviar los cambios desde el repositorio local al repositorio remoto e ignorar temporalmente los subrepos?

Respuesta

4

Creo que necesitarás hacer clones locales de los subrepos.

El problema con empujar el repositorio principal sin empujar los subrepos es que los contenidos de los subrepos no son parte del repositorio principal, solo sus estados son. Los contenidos se referencian desde la ubicación original especificada en .hgsub. Por lo tanto, su repositorio principal .hgsubstate dice que "el subrepo A está en la revisión abcd1234", pero abcd1234 es un cambio que usted hizo y que no desea presionar ... ¿y ahora qué pasaría si clonara el repositorio principal? Intentó clonar el subrepo desde su ubicación original y actualizarlo a abcd1234, pero esa revisión no existe en la ubicación original, por lo que el clon fallaría.

En su lugar, puede hacer clones locales de cada depósito externo y hacer referencia a como como las ubicaciones externas de los subrepos. Luego, cuando presione el repositorio principal, los cambios del subrepo solo se propagarán a sus clones locales. Cuando esté listo para compartir esos cambios, simplemente vaya a los clones locales y presione desde allí, y podrá pasar nombres de sucursales, etc.

+0

Eso tiene sentido, y me hace pensar que no estamos usando subrepos de la manera en que están destinados a ser utilizados. Los estamos utilizando principalmente para ver fácilmente una colección de repositorios ... y nuestro .hgsubstate siempre se refiere a revisiones NULAS de los subrepos. Parece que la extensión hgforest (ahora en desuso) era mejor para nuestros propósitos que los subrepos. –

+2

Esto tiene sentido, pero Mercurial parece ser demasiado celoso. Tratará de presionar 'abcd1234' incluso cuando esa revisión (ni ninguno de sus descendientes) se invoque en' .hgsubstate'. Incluso 'hg out --S -r .' (el' -S' es para 'recurse en subrepos') no enumera los cambios del subrepo. – weberc2

+0

¿Podemos decirle que no presione si la fase de todos los conjuntos de cambios es pública, ya que esto sugiere (siempre que no establezcamos manualmente la fase en público) que ya se ha presionado. –

Cuestiones relacionadas