tag remote publicar create crear git version-control mercurial hg-git

remote - git-- tags



AƱadiendo un subrepositivo de Git a Mercurial (4)

He estado tratando de configurar un proyecto usando bitbucket que tiene dependencias de proyectos alojadas en github. Usando el plugin Hg-Git Mercurial puedo casi llegar allí.

Pero cuando llega el momento de empujar, las cosas se vuelven problemáticas.

La documentación para los subrepositorios mercuriales establece:

2.4 Empujar

Mercurial intentará automáticamente enviar primero todas las subreposiciones del repositorio actual cuando presione. Esto asegurará que los nuevos conjuntos de cambios en subposiciones estén disponibles cuando se haga referencia a los repositorios de nivel superior.

Pero esto causa un gran problema ya que no quiero presionar a todos los subrepositorios (¿por qué lo haría?). Solo tengo acceso de lectura a ellos, por lo que github no lo permite. Solo es necesario enviar el repositorio principal al servidor remoto, pero no puedo averiguar cómo hacerlo. hg quiere tomar el control e impulsar todos los subrepositorios, independientemente de si hay cambios o no. ¿Hay alguna manera de eludir esta característica ?

Las únicas cosas que deben ser empujadas son .hgsub y .hgsubstate . Una vez que han sido empujados a través de rutas alternativas (actualizando a un conjunto de cambios donde no existen los subrepositorios), es posible actualizar y extraer los cambios desde los repositorios remotos, pero si fuera a presionar nuevamente mientras estaba en un conjunto de cambios con el Subrepositorios, todo el calvario se repite.


Creo que deberías usar múltiples repositorios; DVCS funciona mejor así.

Por ejemplo, cree un repositorio que contenga las dependencias de github. Solo presiona ese repositorio para obtener los cambios, nunca presionas. Luego tienes otro repositorio para tu proyecto, para desarrollo. Aquí eres libre de hacer lo que quieras. Y luego se vincula a su propio repositorio de hg para las dependencias.

Eso es si entendí correctamente tu problema y lo que intentas hacer :)


Esto no es posible debido al método de empuje de Mercurial. Esto es un error de diseño .

La mejor solución es actualizar a una revisión anterior donde no existen los subrepositorios y luego presionar. Esto evitará la restricción de Mercurial y cargará los archivos .hgsub y .hgsubstate necesarios. Esto es un poco inconveniente, pero es la mejor manera que he encontrado hasta ahora para que Mercurial y Git trabajen entre sí.

Quizás en el futuro Hg-Git se actualizará para manejar este caso de uso automáticamente.


Para futuras referencias, la rama de desarrollo de mercurial (y, por lo tanto, la próxima versión 1.8) ahora admite subrepos de git nativos. Este caso particular se implementa muy bien y una inserción desde el repositorio raíz solo le dirá al subpopo de git que envíe si su repositorio remoto no tiene la confirmación actual.


Si no tiene conjuntos de cambios salientes en el subrepositivo, el "empuje" no debería hacer nada más que recuperar la última lista de conjuntos de cambios del repositorio remoto. Por lo tanto, la parte de ''empuje'' real del empuje no sucederá. He utilizado con éxito repositorios de BitBucket de solo lectura como submódulos.