subversion source software easiest control best version-control mercurial tortoisehg subrepos

version control - source - Mercurial Subrepos: ¿cómo los creas y cómo funcionan?



subversion vs git 2018 (2)

Probablemente puedas probar estas cosas y aprender más rápido que escribir tu pregunta, pero voy a morder.

¿Se puede ejecutar alguno o todos estos pasos con TortoiseHG, a partir de la versión 0.9.2? Si es así, ¿cómo?

TortiseHG aún no pone envoltorios GUI en torno a la creación de sub-repo, pero TortiseHG siempre ha hecho un gran trabajo al trabajar con la línea de comandos. Usa la línea de comando para crearlos y estarás listo.

¿Qué hace el código anterior? (Una explicación línea por línea sería muy apreciada).

hg init main # creates the main repo cd main # enter the main repo hg init nested # create the nested. internal repo echo test > nested/foo # put the word test into the file foo in the nested repo hg -R nested add nested/foo # do an add in the nested repo of file foo echo nested = nested > .hgsub # put the string "nested = nested" into a file (in main) named .hgsub hg add .hgsub # add the file .hgsub into the main repo

Aquí hay algunas preguntas específicas que me vinieron a la mente cuando intentaba descifrarlo: ¿Qué hace?

Eso no tiene nada que ver con mercurial es shell estándar (unix y dos) para "poner el resultado en un archivo llamado X"

En la línea 5, no entiendo qué es anidado / foo. ¿De dónde vino foo? ¿Qué es foo? Un repositorio? ¿Una carpeta?

Es un archivo en el subrepo. Foo es un nombre arbitrario tradicional, y los contenidos arbitrarios son la cadena "prueba"

Línea 6: esta me desconcierta por completo.

Es necesario poner el contenido en .hgsub para decir que anidado es un repositorio anidado llamado anidado y ubicado en anidado.

En la línea 7, ¿supongo que se está agregando .hgsub a main? ¿O se está agregando a anidado?

principal

Supongamos que configuro mis subrepos y mi repositorio de barras está ahora en la revisión 10. Si intento actualizar a la revisión 7, esto causará las carpetas de mi biblioteca (Mis documentos / Desarrollo / Bibliotecas / Proyecto A y ... / Bibliotecas / ProjectB) para actualizar a lo que está almacenado en la revisión 7 también? Dado que Foo también se refiere a Libraries / ProjectA, ¡esto podría ser interesante!

Los números de revisión no se transmitirán, pero usted tiene el control editando el archivo .hgsubstate.

Situación

Tengo dos soluciones .NET ( Foo y Bar ) y una biblioteca común que contiene ProjectA, ProjectB y ProjectC. Foo y Bar referencia a uno o más proyectos de la biblioteca, pero los proyectos de la biblioteca no se encuentran dentro de las carpetas de Foo and Bar Solution.

Estructura de directorios:

-- My Documents* -- Development -- Libraries -- ProjectA -- ProjectB -- ProjectC -- Projects -- Foo -- Solution -- .hg -- .hgignore -- Foo { Project Folder } -- FooTests { Project Folder } -- Foo.sln { References ProjectA } -- Foo.suo -- Bar -- Solution -- .hg -- .hgignore -- Bar { Project Folder } -- BarTests { Project Folder } -- Bar.sln { References ProjectA and ProjectB } -- Bar.suo

* por desgracia, todavía estoy usando Windows XP ...

Subrepositorios Mercuriales

Objetivo : quiero configurar subrepos para poder almacenar el código fuente de cualquier proyecto de biblioteca referenciado en mis repositorios Foo y Bar .

De acuerdo con esta página (que es literalmente la única documentación que puedo encontrar en subrepos), la configuración de un subrepo requiere la ejecución de los siguientes comandos desde una ventana de la consola de DOS:

1| $ hg init main 2| $ cd main 3| $ hg init nested 4| $ echo test > nested/foo 5| $ hg -R nested add nested/foo 6| $ echo nested = nested > .hgsub 7| $ hg add .hgsub 8| $ ci -m "initial commit"

Preguntas

  1. ¿Se puede ejecutar alguno o todos estos pasos con TortoiseHG, a partir de la versión 0.9.2? Si es así, ¿cómo? Estoy bastante seguro de que las líneas 1-3 pueden, pero no sé sobre las líneas 4-7. Nada de esto parece estar documentado en TortoiseHG.
  2. ¿Qué hace el código anterior? (Una explicación línea por línea sería muy apreciada). Aquí hay algunas preguntas específicas que me vinieron a la mente cuando intentaba descifrarlas:
    • ¿Qué hace > hacer? Traté de buscar en los documentos de Mercurial para > , pero no encontré nada.
    • En la línea 5, no entiendo qué es nested/foo . ¿De dónde vino foo ? ¿Qué es foo ? Un repositorio? ¿Una carpeta?
    • Línea 6: esta me desconcierta por completo.
    • En la línea 7, ¿supongo que se está agregando .hgsub a main ? ¿O se está agregando a nested ?
  3. Digamos que configuro mis subrepos y mi repositorio de Bar está ahora en la revisión 10. Si intento actualizar mi directorio de trabajo a la revisión 7, esto causará las carpetas de mi biblioteca ( My Documents/Development/Libraries/ProjectA y .../Libraries/ProjectB ) para actualizar a lo que está almacenado en la revisión 7 también?

Actualizar

Agregué una octava línea de código: ci -m "initial commit" . Esto hace dos cosas: (1) agrega un archivo .hgsubstate al repositorio principal y (2) confirma todos los cambios, incluido el nuevo subrepo en el repositorio principal (con el mensaje "confirmación inicial"). El propósito del archivo .hgsubstate es realizar un seguimiento del estado de todos los subrepos, por lo que si regresa a una revisión anterior, también obtendrá la revisión correcta de todos los subrepos.

Actualización 2: algunas instrucciones

Después de más experimentación, creo que ahora puedo proporcionar los pasos para resolver mi problema original (usando principalmente Windows Explorer y TortoiseHG):

Creando un subrepo

  1. Libraries/ProjectA , Libraries/ProjectB y los repositorios principales ( Projects/Foo/Solution y Projects/Bar/Solution ) deben ser repositorios separados.
  2. Projects/Foo/Solution Abiertos Projects/Foo/Solution .
  3. Clonar de Libraries/ProjectA a Projects/Foo/Solution .
  4. Agregue ProjectA al repositorio de Foo .
  5. Use un editor de texto para crear un archivo llamado .hgsub , que contenga lo siguiente:

    ProjectA = ProjectA

  6. Abra una ventana de la consola de DOS e ingrese los siguientes comandos (vea la nota a continuación) :

    cd c:/.../Projects/Foo/Solution hg ci -m "Committing subrepo "ProjectA"

  7. Para Bar , los pasos son básicamente los mismos, excepto que el archivo .hgsub debe contener entradas para ambos proyectos, como este:

    ProjectA = ProjectA ProjectB = ProjectB

Nota: comenzando con TortoiseHG 0.10 (que está programado para marzo), podrá usar el comando HG Commit shell para hacer esto, pero por ahora, debe usar la línea de comando.

Una vez que todo está configurado, se vuelve un poco más fácil.

Confirmación de cambios : para realizar cambios en Foo o Bar , se realiza una operación Synchronize/Pull para cada subrepo para que los subrepos estén sincronizados con las últimas revisiones en los repositorios de proyectos de la biblioteca. Luego, nuevamente usa la línea de comando para confirmar los cambios (hasta la versión 0.10, cuando puede usar TortoiseHG para confirmar).

Actualización del directorio de trabajo a una revisión anterior : parece funcionar bastante bien con TortoiseHG y no parece requerir el uso de ningún comando de DOS. Para trabajar con la revisión anterior en Visual Studio, deberá realizar una operación Synchronize/Push para volver a colocar la versión anterior de los proyectos de la biblioteca en la carpeta Libraries/ProjectX .

Por mucho que me gusta TortoiseHG para tareas simples, probablemente sea mejor escribir archivos por lotes para las operaciones subrepo usadas con frecuencia (especialmente las actualizaciones).

Espero que esto ayude a alguien en el futuro. Si ve algún error, hágamelo saber (o siéntase libre de editarse si puede).


Solo una actualización rápida, después del lanzamiento de TortoiseHg 1.0.

El soporte de subrepo en THG 1 es lo suficientemente bueno como para permitirle hacer pasos de ejemplo desde Windows Explorer. El único que no pude hacer desde Explorer fue el paso 6:

echo nested = nested > .hgsub

Explorador de Windows (al menos en XP) informa un error de cambio de nombre "Debe escribir un nombre de archivo". si intenta cambiar el nombre de "Nuevo documento de texto.txt" a ".hgsub". * 8 '')

Editar: Por cierto, si utilizas tanto hg a través de TortoiseHg como la línea de comandos y aún no tienes instalada la PowerTool "Command Here" de Microsofts, te lo recomiendo encarecidamente. Agrega una entrada del menú contextual "Abrir ventana de comando aquí" a cada directorio en el Explorador de Windows, lo que facilita abrir las ventanas de comandos en cualquier lugar que las necesite.