¿Cuál es la forma correcta de manejar repositorios Hg anidados con Mercurial/TortoiseHg?


Estoy luchando sobre cómo rastrear correctamente los repositorios anidados usando TortoiseHg.

Tengo un repositorio principal que rastrea todo mi proyecto. Este proyecto contiene varios pequeños plugins que se almacenan dentro de un subdirectorio plugins/.

Me encantaría realizar un seguimiento de cada plugin de forma independiente (comprometiéndose y empujando a BitBucket para cada uno de ellos) mientras que todavía ser capaz de hacer un "todo" commit de mi proyecto, incluyendo los cambios realizados a los plugins y empujándolo a un otro ubicación (no BitBucket).

Lo que he hecho hasta ahora es crear un nuevo repositorio para cada uno de mis plugins. Puedo comprometerme y empujarlos a BitBucket fácilmente. Pero cuando fui a confirmar mi repositorio "principal", TortoiseHg muestra un mensaje de error que dice que abort: path 'mainrepo\\plugins\\plugin1\\plugin1.php' is inside repo 'mainrepo\\plugins\\plugin1'.

Puedo ver que estoy haciendo algo mal, pero no puedo decir qué.

Estoy usando una noche de ambos Mercurial y TortoiseHg (ToirtoiseHg versión 0.9.3+237 - ea50f793bbe4 y Mercurial-1.4.3+225-70dea42c9406) en WinXP. Yo leo ese manejo de subrepos se agregó a esta compilación de TortoiseHg, pero, bueno, ni siquiera estoy seguro de que subrepos sea la característica que se supone que debo usar aquí.

Update
He hecho algunos progresos, pero aún no puedo hacer que funcione como me gustaría.
Aquí está mi estructura :

-- .hg
-- core
-- app
    -- file.php
    -- file.css
    -- plugins
        -- plugin1
            -- file1.php
        -- plugin2
            -- file2.php

Fui a app/plugins, y cloné un plugin (llamado plugin3) de BitBucket aquí. Luego creé una .archivo hgsub en la raíz y se le agregó app/plugins/plugin3 = app/plugins/plugin3. Entonces fui capaz de comprometer toda mi directorio.

Pero luego intenté agarrar la última versión de plugin1 de BitBucket, así que fui a app/plugins, eliminé la carpeta plugin1/ y cloné el plugin1 de BitBucket. Luego agregué app/plugins/plugin1 = app/plugins/plugin1 a .hgsub pero cuando traté de cometerlo fui recibido con abort: path 'app/plugins/plugin1/file1.php' is inside repo 'app\\plugins\\plugin1'

El problema parece dispararse cuando mi subrepo tiene el mismo nombre que un directorio ya rastreado por Hg en el directorio plugins/.

¿Qué estoy haciendo mal ? Debo añadir / editar algo especial en el .hg de mi plugins ?

Update
Por fin he conseguido que funcione como quiero.
Tuve que "manualmente" dígale Mercurial para quitar los plugins/plugin1, plugins/plugin2 directorios, confirmar el cambio, entonces clon de nuevo el plugin1 y plugin2 de BitBucket, agrega app/plugins/plugin1 = app/plugins/plugin1 a .hgsub y commit all. Funcionó.
El paso importante fue comprometerse después de haber eliminado las carpetas plugin1/plugin2.

Author: pixelastic, 2010-03-03

2 answers

Finalmente he logrado que funcione de la manera que me encantaría. Estoy usando TortoiseHg en WinXP, así que no podré decirte qué llamadas hg se hicieron internamente, pero no creo que se use nada sofisticado aquí.

Comencé con un repositorio existente, dentro del cual tenía un directorio plugins/ lleno de plugin1/, plugin/2 directorios (no repositorios, solo directorios simples). También tenía esos plugins en línea, alojados en BitBucket.

  • Primero fui a mi directorio plugins/, haga clic derecho on plugin1/, TortoiseHg => Remove Files.
  • Vuelvo a la raíz de mi repositorio, hago clic derecho y Hg Commit
  • Luego volví a mi directorio plugins/, hice clic con el botón derecho, TortoiseHg => Clone..., seleccioné la dirección http del plugin en bit bucket (http://bitbucket.org/username/plugin1/ y hice clic en Done
  • La parte posterior de nuevo a la raíz del repositorio principal. Creé (o edité si el archivo ya existía) un archivo .hgsub y añadí la línea plugins/plugin1 = plugins/plugin1 dentro de él.
  • Entonces pude confirmar el repositorio raíz principal o el repositorio plugin1 independientemente

Tenga en cuenta que los pasos adicionales remove y commit solo son necesarios si el repositorio recién clonado tiene el mismo nombre de un directorio ya rastreado.

 18
Author: pixelastic,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-03-05 11:51:26

Deberías intentar usar:

  • La extensión del bosque o
  • (mejor opción, porque oficialmente en el Hg): el Subrepo feature

Subrepositorios es una característica que le permite tratar una colección de repositorios como un grupo.
Esto le permitirá clonar, confirmar, empujar y tirar proyectos y sus bibliotecas asociadas como un grupo.

 5
Author: VonC,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-03-03 14:44:07