funciona - mercurial hg
¿Cuál es la forma correcta de manejar los repositorios de Hg anidados con Mercurial/TortoiseHg? (2)
Estoy teniendo problemas para saber cómo rastrear correctamente los repositorios anidados usando TortoiseHg.
Tengo un repositorio principal que rastrea todo mi proyecto. Este proyecto contiene varios pequeños complementos que se almacenan dentro de un subdirectorio de complementos.
Me encantaría realizar un seguimiento de cada complemento de forma independiente (comprometiendo y presionando a BitBucket para cada uno de ellos) mientras puedo realizar una confirmación "completa" de mi proyecto, incluidos los cambios realizados en los complementos y enviarlo a otra ubicación no BitBucket).
Lo que he hecho hasta ahora es crear un nuevo repositorio para cada uno de mis complementos. 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 Mercurial y TortoiseHg (ToirtoiseHg versión 0.9.3 + 237-ea50f793bbe4 y Mercurial-1.4.3 + 225-70dea42c9406) en WinXP. Leí que el manejo de subrepos se agregó a esta compilación de TortoiseHg, pero bueno, ni siquiera estoy seguro de que los subrepos sean la característica que debo usar aquí.
Actualizar
He progresado un poco, pero aún no puedo hacerlo funcionar como me gustaría.
Aquí está mi estructura:
-- .hg
-- core
-- app
-- file.php
-- file.css
-- plugins
-- plugin1
-- file1.php
-- plugin2
-- file2.php
Fui a la aplicación / complementos, y cloné un complemento (llamado plugin3) de BitBucket aquí. Luego creé un archivo .hgsub en la raíz y le agregue app/plugins/plugin3 = app/plugins/plugin3
. Entonces pude cometer todo mi directorio.
Pero luego traté de obtener 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 intenté cometerlo, app/plugins/plugin1 = app/plugins/plugin1
un mensaje abort: path ''app/plugins/plugin1/file1.php'' is inside repo ''app//plugins//plugin1''
El problema parece desencadenarse cuando mi subrepo tiene el mismo nombre que un directorio que Hg ya ha rastreado en el directorio de complementos.
Qué estoy haciendo mal ? ¿Debo agregar / editar algo especial en el .hg de mis complementos?
Actualizar
Finalmente he logrado que funcione como quiero.
Tuve que "manualmente" decirle a Mercurial que elimine los directorios de plugins / plugin1, plugins / plugin2, confirmar el cambio y luego volver a clonar plugin1 y plugin2 de BitBucket, agregar app/plugins/plugin1 = app/plugins/plugin1
para .hgsub y cometer todo Funcionó.
El paso importante fue confirmar después de haber eliminado las carpetas plugin1 / plugin2.
Debes intentar usar:
- La extensión forestal o
- (Mejor opción, porque oficialmente en el Hg): la función Subrepo
Subrepositorios es una característica que le permite tratar una colección de repositorios como un grupo.
Esto le permitirá clonar, comprometerse, impulsar y extraer proyectos y sus bibliotecas asociadas como un grupo.
Finalmente he logrado que funcione como me gustaría. Estoy usando TortoiseHg en winXP, por lo que no podré decirle qué llamadas de 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 de plugins/
lleno de directorios plugin1/
, plugin/2
(no repositorios, solo directorios simples). También tuve esos complementos en línea, alojados en BitBucket.
- Primero fui a mi directorio
plugins/
, haga clic derecho enplugin1/
,TortoiseHg => Remove Files
. - Regreso a la raíz de mi repositorio, haga clic derecho y
Hg Commit
- Luego volví a mi directorio de
plugins/
, haga clic con el botón derecho,TortoiseHg => Clone...
, seleccioné la dirección http del complemento en el depósito de bits (http://bitbucket.org/username/plugin1/
y hice clic enDone
- La vuelta de nuevo a la raíz del repositorio principal.
plugins/plugin1 = plugins/plugin1
si el archivo ya existía) un archivo.hgsub
y agrego la líneaplugins/plugin1 = plugins/plugin1
dentro de él. - Entonces pude confirmar el repositorio raíz principal o el repositorio plugin1 de forma independiente
Tenga en cuenta que los pasos adicionales de remove
y commit
solo son necesarios si el nuevo repositorio clonado tiene el mismo nombre de un directorio ya rastreado.