tortoise - ¿Cómo puedo clonar una subcarpeta de un repositorio en Mercurial?
svn mercurial (6)
Tengo un repositorio de Mercurial que contiene un puñado de proyectos relacionados. Quiero dividir solo uno de estos proyectos para trabajar en otro lugar.
¿Es posible la clonación solo parte de un repositorio, y es esa la forma correcta de lograrlo?
(Finales de 2016) Mainline Mercurial aún no ofrece soporte para "clones estrechos", pero hay extensiones de terceros que abordan el problema de diferentes maneras.
Si puede hacer frente a un simple checkout limitado (también conocido como "checkout disperso" o "checkout parcial por ruta de archivo"), entonces la extensión sparse.py
de Facebook desde el repositorio experimental hg (busque en el directorio hgext3rd/
) puede ser viable. En este escenario, aún puede clonar el historial completo (por lo tanto, el directorio .hg no es más pequeño) pero su directorio de trabajo solo muestra / actúa en un subconjunto del repositorio completo.
Alternativamente, Google ha creado una extensión NarrowHG que hace clonación estrecha (también conocida como "clonación parcial por ruta de archivo"). Deberá tener el control del servidor, el cliente y estar dispuesto a usar funciones experimentales, pero realmente restringe el historial copiado del clon en .hg a un subconjunto de lo que estaba en el repositorio original.
En lugar de hacer un clon parcial, puede usar la extensión de conversión para dividir su repositorio en más de un repositorio por repositorio secundario.
Específicamente, vea la sección, Convertir desde Mercurial :
También es útil filtrar los repositorios de Mercurial para obtener subconjuntos de uno existente. Por ejemplo, para transformar un subfoo de subdirectorio de un repositorio foo en un repositorio con su propia vida (manteniendo su historial completo), haga lo siguiente:
$ echo include subfoo > /tmp/myfilemap $ echo rename subfoo . >> /tmp/myfilemap $ hg convert --filemap /tmp/myfilemap /path/to/repo/foo /tmp/mysubfoo-repo
Esto es sencillo con la extensión Convertir .
Lo que quieres es un clon estrecho o parcial , pero lamentablemente todavía no se admite.
Si ya tiene un repositorio grande y se da cuenta de que tendría sentido dividirlo en varios repositorios más pequeños, entonces puede usar la extensión de conversión para hacer una conversión de Mercurial a Mercurial . Tenga en cuenta que esto crea un nuevo repositorio foo
y no puede empujar / tirar entre your-big-repo
y foo
.
La convert extension
no está habilitada de manera predeterminada, así que agregue lo siguiente al archivo hgrc
su repositorio o su archivo mercurial.ini
:
[extensions]
hgext.convert=
Luego crea un archivo map.txt
con
include "libs/foo"
rename "libs/foo" .
(note que puede usar barras inclinadas incluso en Windows) y ejecute
$ hg convert --filemap map.txt your-big-repo foo
Eso hará que foo
un repositorio con el historial completo de la carpeta libs/foo
de your-big-repo
.
Si desea eliminar toda la evidencia de foo
de your-big-repo
, puede hacer otra conversión en la que use exclude libs/foo
para deshacerse del directorio.
Cuando tienes varios repositorios como ese y quieres usarlos como un todo, deberías mirar subrepositories . Esta función le permite incluir otros repositorios en un proceso de pago, de manera similar a cómo funcionan svn:externals
. Por favor, siga las recommendations en esa página wiki.
Me he topado con este problema y encontré una manera de hacerlo: usando enlaces simbólicos (desafortunadamente Linux solo)
Por ejemplo, si solo necesita /project
en el repositorio, en su computadora, clone el repositorio en otra carpeta, luego use ln -s /repo/location/ project
. Mercurial lo manejará
No es posible, hg clone
clonará todo el repositorio.
Puede echar un vistazo a la extensión del sub-repositorio que le permite tener repositorios dentro de un repositorio, que pueden coincidir con sus necesidades.