Configuración de subrepos mercuriales/horno en OSX
-
28-10-2019 - |
Pregunta
He estado tratando de seguir las instrucciones en la respuesta a esta pregunta, usando el horno.
Me gustaría poder organizar las cosas de la siguiente manera:
/somepath/thirdparty
mapas en un repositorio de horno "tercero" y contiene un código variado/somepath/common
mapas a un repositorio de horno "común" y contiene código compartido que he escrito
y
/somepath/project1
Mapas del repositorio del horno "Proyecto1"/somepath/project1/thirdparty
mapas en rama de tercera parte de arriba/somepath/project1/common
mapas a la rama de lo común arriba
y
/somepath/project2
Mapas del repositorio del horno "Proyecto1"/somepath/project2/thirdparty
mapas a otra rama de tercera parte de arriba/somepath/project2/common
mapas a otra rama de común arriba
Encontré que cuando creé el .hgsub
Archivo según las instrucciones y agregadas/lo empujó al horno, ya no podía ver los archivos del horno en el visor de archivos web del horno; mostraba un mensaje oscuro sobre el horno "sobrecalentamiento" :-) Además, mientras creía automáticamente las subcolidatos en El lugar correcto, no estaban poblados con archivos (posiblemente porque el extracción falló).
¿Alguien intentó algo como esto antes, usando Kiln?
Como tengo la intención de desarrollar una serie de aplicaciones que usen el código común (y potencialmente eventualmente lanzar la biblioteca como código abierto), me gustaría que se administre en repositorios discretos. Sin embargo, como algunos de los proyectos son para clientes finales, necesito poder darles un solo repositorio que incluya cosas como se describió anteriormente.
Solución
El horno lo hace Actualmente no admite SubrePos que usan URL anidadas en el servidor. Esto significa que no puede hacer que las siguientes URL funcionen:
http://server/kiln/somepath/project1
http://server/kiln/somepath/project1/thirdparty
Entonces debes configurar el horno para que tengas cuatro Repositorios en el servidor:
http://server/kiln/somepath/project1
http://server/kiln/somepath/project2
http://server/kiln/somepath/thirdparty
http://server/kiln/somepath/common
Eso es fácil, solo cuatro repositorios normales. Luego clon "proyecto" y cree el .hgsub
Archivo con:
thirdparty = http://server/kiln/somepath/thirdparty
common = http://server/kiln/somepath/common
Cuando lo empuje de regreso al horno, notará y mostrará enlaces para los subrepositorios. Sin embargo, los subrePositorios no Termine siendo anidados en el servidor. Así que no habrá ninguno project1/thirdparty
ruta en el servidor.
También está lejos de ser claro que querrías eso. Cuando tiene varios proyectos que colaboran y usan una base de código común, desea que "Project1" y "Project2" obtengan los cambios de los demás en esta base de código común. Entonces es muy útil que el common
Subrepo en ambos proyectos empuje y extrae de http://server/kiln/somepath/common
.
En mercurial, nosotros Normalmente recomiendo que usas rutas del formulario common = common
en el .hgsub
expediente. Esto significa que el servidor debe admitir repositorios anidados. Cuando el horno no es compatible con los reposques anidados, puede usar rutas completas.
Cuando inicialmente configure los subrepositorios, recuerde que necesita actualizarlos manualmente. Entonces, con las URL anteriores, configuraría "Project1" ejecutando:
$ hg clone http://server/kiln/somepath/project1
$ echo "common = http://server/kiln/somepath/common" > .hgsub
$ echo "thirdparty = http://server/kiln/somepath/thirdparty" > .hgsub
$ hg commit -m "Created subrepos"
Esto crea subrepositorios vacíos iniciales. Están vacíos porque no le has dicho a Mercurial qué cambios de cambios necesitas en ellos. Esto se rastrea en .hgsubstate
donde encontrarás:
0000000000000000000000000000000000000000 common
0000000000000000000000000000000000000000 thirdparty
Para poblar los subrepositorios que haces
$ cd common
$ hg pull --update
$ cd ../thirdparty
$ hg pull --update
$ cd ..
$ hg commit -m "Updated subrepos"
Esto actualiza el 000...
colocar .hgsubstate
con los ID de la punta de la punta actual IDS para los dos subrepos. Los clones futuros de "Project1" notarán el .hgsubstate
Archivo y asegúrese de actualizar los subrePos a la revisión mencionada allí.