2010-10-30 10 views
16

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

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

La documentación para Mercurial subrepositories estados:

2,4 empuje

Mercurial automáticamente intentará empujar primero todos subrepos del repositorio actual cuando se presiona. Esto asegurará que los nuevos conjuntos de cambios en los subrepos estén disponibles cuando sean referenciados por los repositorios de nivel superior.

Pero esto causa un gran problema ya que no quiero empujar todas las subrepositories (¿por qué debería?) - Sólo he leído el acceso a ellos, por lo github no lo permite. Solo el repositorio principal debe enviarse al servidor remoto, pero no puedo encontrar la manera de hacerlo. hg quiere tomar el control e impulsar todos los subrepositorios, independientemente de si hay cambios o no. ¿Hay alguna forma de eludir esta función ?

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

Respuesta

4

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

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

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

+0

es un error que se manifiesta al usar github, hg-git y una función de subrepositorio, intente utilizar el subrepositorio nativo de git –

0

Si no tiene conjuntos de cambios salientes en la subrepository, el 'empuje' en realidad debería hacer otra cosa que recuperar la lista de cambios más tardar desde el repositorio remoto. Por lo tanto, la parte real de 'empuje' del empuje no ocurrirá. He utilizado con éxito los repositorios de BitBucket de solo lectura como submódulos.

+0

Sí, debería ser, que es exactamente lo que hace, sin embargo, el impulso realmente sucede, es solo que si no hay cambios, entonces no se cargará nada. Github te obliga a autenticarte antes de verificar si hay algún cambio. Entonces, para que esto funcione, el impulso debe ignorarse por completo. – summatix

1

Creo que deberías usar varios repositorios; DVCS funciona mejor así.

Por ejemplo, crea un repositorio que contenga las dependencias de github. Usted solo obtiene ese repo para obtener los cambios, nunca empuja. Luego tiene otro repositorio para su proyecto, para desarrollo. Aquí tienes la libertad de hacer lo que quieras. Y luego se vincula a su propio repositorio hg para las dependencias.

Eso es si entendí correctamente su problema y lo que estamos tratando de hacer :)

+1

Lo siento, no entiendo. Mi problema es que necesito que Mercurial y Git jueguen bien entre ellos, lo cual hacen. Pero la llamada función de hg solo hace las cosas un poco problemáticas. – summatix

+0

No es una "característica llamada", es un paso esencial para trabajar con hg. Push/pull sincroniza su repositorio local con el remoto. Lo que sugiero es que puede necesitar una configuración de depósito diferente para lo que está tratando de hacer; es común cuando se usa git/mercurial tener múltiples repositorios para su proyecto. Presionando su repo mercurial no debería afectar las cosas que está tratando de obtener de github y, por supuesto, no debería presionar al repositorio github. –

+1

Estamos claramente en diferentes campos de juego aquí – summatix

11

Para referencia futura, la rama de desarrollo de mercurial (y por lo tanto la próxima versión 1.8) ahora admite subtipos nativos de git.Este caso particular se implementa muy bien y un impulso desde el repositorio raíz solo le indicará al subrepo git si no se sabe que su repositorio remoto tiene la confirmación actual.

+0

Aquí hay algunos detalles para el soporte nativo de subred de git dentro de mecurial http://mercurial.selenic.com/wiki/Subrepository#Git_subrepositories –

Cuestiones relacionadas