vscode visual tag studio color code closing close brackethighlighter autoclose visual-studio svn mercurial subrepos

visual-studio - visual - vs code autoclose html



Divida el repo grande en múltiples subrepos y conserve la historia(Mercurial) (1)

Tenemos una gran base de código que contiene varios proyectos compartidos, archivos de soluciones, etc. en un directorio en SVN. Estamos migrando a Mercurial. Me gustaría aprovechar esta oportunidad para reorganizar nuestro código en varios repositorios para que la clonación para la bifurcación tenga menos sobrecarga. Ya he convertido con éxito nuestro repositorio de SVN a Mercurial a la vez que conservo la historia. Mi pregunta: ¿cómo puedo dividir los diferentes proyectos en repositorios separados y al mismo tiempo preservar su historia?

Este es un ejemplo de cómo se ve actualmente nuestro repositorio único (OurPlatform):

/OurPlatform ---- Core ---- Core.Tests ---- Database ---- Database.Tests ---- CMS ---- CMS.Tests ---- Product1.Domain ---- Product1.Stresstester ---- Product1.Web ---- Product1.Web.Tests ---- Product2.Domain ---- Product2.Stresstester ---- Product2.Web ---- Product2.Web.Tests ==== Product1.sln ==== Product2.sln

Todas estas son carpetas que contienen Proyectos VS, excepto los archivos de la solución. Product1.sln y Product2.sln hacen referencia a todos los otros proyectos. Idealmente, me gustaría tomar cada una de esas carpetas y convertirlas en repositorios Hg separados, y también agregar repositorios nuevos para cada proyecto (actuarían como repositorios principales). Luego, si alguien iba a trabajar en Producto1, clonaría el repositorio Producto1, que contenía las referencias de Product1.sln y subrepo a los Conjuntos de referencia, Core, Core.Tests, Database, Database.Tests, CMS y CMS.Tests.

Por lo tanto, es fácil hacer esto simplemente iniciando en los directorios del proyecto. ¿Pero se puede hacer preservando la historia? ¿O hay una mejor manera de arreglar esto?

EDITAR::::

Gracias a la respuesta de Ry4an, pude lograr mi objetivo. Quería compartir cómo lo hice aquí para otros.

Como teníamos muchos proyectos separados, escribí un pequeño script de bash para automatizar la creación de los mapas de archivo y para crear el script de bat final para hacer la conversión. Lo que no fue completamente evidente a partir de la respuesta, es que el comando de conversión debe ejecutarse una vez para cada mapa de archivos, para producir un repositorio separado para cada proyecto. Este script se colocará en el directorio sobre una copia de trabajo svn que usted haya convertido previamente. Utilicé la copia de trabajo ya que la estructura de archivos coincidía con lo que yo quería que fueran los nuevos repositorios hg finales.

#!/bin/bash # this requires you to be in: /path/to/svn/working/copy/, and issue: ../filemaplister.sh ./ for filename in * do extension=${filename##*.} #$filename|awk -F . ''{print $NF}'' if [ "$extension" == "sln" -o "$extension" == "suo" -o "$extension" == "vsmdi" ]; then base=${filename%.*} echo "#$base.filemap" >> "$base.filemap" echo "include $filename" >> "$base.filemap" echo "C:/Applications/TortoiseHgPortable/hg.exe convert --filemap $base.filemap ../hg-datesort-converted ../hg-separated/$base > $base.convert.output.txt" >> "MASTERGO.convert.bat" else echo "#$filename.filemap" >> "$filename.filemap" echo "include $filename" >> "$filename.filemap" echo "rename $filename ." >> "$filename.filemap" echo "C:/Applications/TortoiseHgPortable/hg.exe convert --filemap $filename.filemap ../hg-datesort-converted ../hg-separated/$filename > $filename.convert.output.txt" >> "MASTERGO.convert.bat" fi done; mv *.filemap ../hg-conversion-filemaps/ mv *.convert.bat ../hg-conversion-filemaps/

Esta secuencia de comandos examina cada archivo en una copia de trabajo svn y, según el tipo, crea un nuevo archivo de mapa de archivos o se agrega a uno existente. El if es realmente solo para capturar varios archivos de estudio visual, y colocarlos en un repositorio separado. Está pensado para ejecutarse en bash (cygwin en mi caso), pero ejecutar el comando de conversión real se realiza a través de la versión de hg que se incluye con TortoiseHg debido a problemas de bifurcación / proceso en Windows (gah, lo sé ...).

Así que ejecuta el archivo MASTERGO.convert.bat, que analiza su repositorio hg convertido y crea repositorios separados utilizando el mapa de archivos provisto. Una vez que se completa, hay una carpeta llamada hg-separados que contiene una carpeta / repo para cada proyecto, así como una carpeta / repo para cada solución. Luego, tiene que clonar manualmente todos los proyectos en un repositorio de soluciones y agregar los clones al archivo .hgsub. Después de confirmar, se crea un archivo .hgsubstate y ya está listo para comenzar.

Con el ejemplo dado arriba, mi archivo .hgsub se ve así para "Product1":

Product1.Domain = /absolute/path/to/Product1.Domain Product1.Stresstester = /absolute/path/to/Product1.Stresstester Product1.Web = /absolute/path/to/Product1.Web Product1.Web.Tests = /absolute/path/to/Product1.Web.Tests

Una vez que transfiera estos repositorios a un servidor central, cambiaré manualmente las rutas para que sean las URL.

Además, no hay un análogo al repositorio inicial de OurPlatform svn, ya que todo está separado ahora.

¡Gracias de nuevo!


Esto se puede hacer absolutamente. Querrás usar el comando hg convert . Aquí está el proceso que usaría:

  1. convierta todo a un solo repositorio de hg usando hg convert con un tipo de fuente de svn y un tipo de hg de destino (parece que ya ha hecho este paso)
  2. cree una colección de archivos de filemap archivos para usar con la opción --filemap hg convert ''
  3. ejecute hg convert con el tipo de fuente hg y el tipo de destino hg y la fuente es el repositorio de mercurial creado en el paso uno, y hágalo para cada uno de los mapas de archivos que creó en el paso dos.

La sintaxis del mapa de archivos se muestra en la salida de hg help convert , pero aquí está la esencia:

The filemap is a file that allows filtering and remapping of files and directories. Comment lines start with ''#''. Each line can contain one of the following directives: include path/to/file exclude path/to/file rename from/file to/file

Entonces, en tu ejemplo, tus mapas se verían así:

# this is Core.filemap include Core rename Core .

Tenga en cuenta que si tiene una inclusión, la exclusión de todo lo demás está implícita. Además, la línea de cambio de nombre termina en un punto y mueve todo un nivel hacia arriba.

# this is Core.Tests include Core.Tests rename Core.Tests .

y así.

Una vez que haya creado los repositorios desglosados ​​para cada uno de los nuevos repositorios, puede eliminar el repositorio inicial de has-everything creado en el paso uno y comenzar a configurar su configuración de .hgsub en archivos .hgsub .