what significado meaning for mercurial dvcs

significado - mercurial vs git



¿Puedo clonar parte de un repositorio de Mercurial? (6)

¿Es posible clonar parte de un repositorio Mercurial? Digamos que el repositorio es bastante grande, o contiene múltiples proyectos, o múltiples ramas. ¿Puedo clonar solo una parte del repositorio?

Por ejemplo, en Subversion, puedes tener trunk y branches . Si solo quiero obtener un troncal (o una de las sucursales) solo puedo solicitar [project]/trunk . Si clono el repositorio hg obtendré el tronco y todas las ramas. Esto podría ser una gran cantidad de información que no quiero. ¿Puedo evitar conseguir esto?

Alternativamente, si quiero tener múltiples proyectos en un repositorio de hg, ¿cómo debo hacer esto? Es decir, para poder obtener uno de los proyectos e ignorar los otros.


@Mella

"Por ejemplo, en Subversion, es posible que tenga un tronco y sucursales. Si solo deseo obtener un tronco (o una de las ramas) solo puedo solicitar [proyecto] / tronco. Si clono el repositorio de hg, obtendré el tronco y todos las ramas. Esto podría ser una gran cantidad de información que no quiero. ¿Puedo evitar obtener esto? "

Absolutamente. Simplemente use hg clone -r <branch> y obtenga solo la rama que desea. Si tiene muchas sucursales, necesita un -r <branch> para cada una. <branch> no tiene que ser una rama con nombre: simplemente puedes tener varias cabezas sin nombre (o cabezas con nombre que usan marcadores, aunque aún no son perfectas, porque actualmente no aparecen con push / pull / clone) .

Tenga en cuenta que en las DVCSes, Mercurial entre ellas, las sucursales a menudo son de corta duración y se fusionan entre sí con frecuencia. Si tira de una rama, seguirá obteniendo el historial común que tiene con cualquier otra rama.


@Nick dijo:

"Esta es una omisión bastante grande ya que muchos sitios de alojamiento solo ofrecen un repositorio. Con svn puedo tener tantos repositorios como quiera tomando solo una rama de la principal. Los sub-postes suenan como un hack".

Subrepos (también conocido como submódulos) no son tan ideales como "clones estrechos" es cierto. Pero al menos por tener muchos proyectos distintos en el repositorio de un sitio de alojamiento, puede tener múltiples bases de código en un repositorio. Esto no le permitirá dividir diferentes secciones de un repositorio / subdirectorio de un proyecto, pero le permitirá administrar múltiples proyectos. Lo que hace es tener muchas ramas con nombre cada una enraizada en el conjunto de cambios vacío (o nulo) (es decir, no tienen una revisión de raíz común). Puede ser un poco desordenado rastrear las ramas pero funciona.

Por ejemplo:

hg init hg branch project-1 # Changes, commits, repeated as needed hg update null hg branch project-2 # Changes, commits, repeated as needed

Ahora puedes ver todos tus proyectos:

> hg branches project-2 5:42c2beffe780 project-1 2:43fd60024328

Los proyectos no están relacionados (aunque puedes fusionarlos):

> hg debugancestors -1:000000000000

Lo más útil: puede clonar solo el proyecto que desee, y los demás no se mezclarán:

> hg clone <repository> -r project-1

El gráfico para esto se vería así ( hg log -qG ):

@ 5 | project-2 | {tip} | o 4 | project-2 | o 3 | project-2 o 2 | project-1 | o 1 | project-1 | o 0 | project-1

Puede hacer esto para la mayor cantidad de proyectos que necesite, listando cada uno con las hg branches y saltando entre ellos con la hg update . Esto tiene un poco de cuidado, porque el soporte de rama nombrado no es perfecto. No siempre es intuitivo para una cosa (lea acerca de hg clone -u en Mercurial 1.4 - el comportamiento pre-1.4 es sorprendente cuando se clona). Pero funciona.


Mercurial y Git solo permiten la clonación en todo el repositorio. Por lo tanto, se recomienda que cada proyecto tenga su propio repositorio.

Mercurial tiene una ForestExtension para facilitar tener un "bosque" para los repositorios de proyectos. La extensión mantiene cada proyecto en un repositorio separado, pero proporciona opciones para actualizar / empujar / tirar todos los repositorios del bosque juntos.



Que yo sepa, eso no es posible. Pero en comparación con Subversrion, la clonación de los repositorios completos no puede ser más lenta que solo una rama de SVN.

Citando de UnderstandingMercurial :

Muchos usuarios de SVN / CVS esperan hospedar proyectos relacionados en un solo repositorio. Esto no es realmente para lo que se diseñó hg, por lo que debería probar una forma diferente de trabajar. Esto significa especialmente que no puede desproteger solo un directorio de un repositorio.

Si es absolutamente necesario que alojes múltiples proyectos en una especie de meta-repositorio, puedes probar la función Subrepositories que se introdujo con Mercurial 1.3 o la anterior ForestExtension .


Sí tu puedes. Estoy seguro de que has seguido adelante, pero por el bien de aquellos que vagarán por aquí más tarde, seguí los documentos en ConvertExtension y escribí un sencillo script por lotes:

@echo off echo Converting %1 REM Create the file map echo include %1 > ~myfilemap echo rename %1 . >> ~myfilemap REM Run the convert process hg convert --filemap ~myfilemap ./ ../%1 REM Delete the file map del ~myfilemap cd ../%1 REM update the new repo--to create the files hg update

Asígnele un nombre como split.cmd y split.cmd en el directorio para el repositorio que desea dividir. Digamos, por ejemplo, que tiene C:/repos/ReallyBigProject , y una subcarpeta es C:/repos/ReallyBigProject/small-project . En el símbolo del sistema, ejecute:

cd/repos/ReallyBigProject split.cmd small-project

Esto creará C:/repos/small-project con una porción del historial relevante de revisiones del proyecto más grande.

La convert no está habilitada por defecto. Deberá asegurarse de que existan las siguientes líneas en su archivo .hg/hgrc ( c:/repos/ReallyBigProject/.hg/hgrc en mi ejemplo):

[extensions] hgext.convert=