2010-11-17 11 views
22

Soy nuevo en Mercurial HG. Mis amigos crearon un repositorio y lo voy a usar. Instalé TortoiseHG e intento obtener el último código. Descubrí que cuando uso la operación Clonar, extraeré todo el código a mi local, incluidos los historiales (¿estoy en lo cierto?). Esto no es necesario para mí. Solo quiero obtener el último código. ¿Hay una operación para esto?Al usar Mercurial HG, ¿cómo obtener el último código?

+0

¡Gracias a todos! Aunque todavía tengo que clonar todo el repositorio, ¡aprendo más sobre Mercurial HG de cada respuesta! – DeepNightTwo

Respuesta

18

En resumen, no.

En un poco más de tiempo: Mercurial aún no admite clones "poco profundos" en los que solo se obtiene parte de la historia. Entonces, cada vez que clonas, atraes todo el repositorio con todos los conjuntos de cambios.

Además, a diferencia de Subversion, no hay forma de hacer un clon "estrecho" en el que solo se realiza la salida de una porción de un repositorio. Por ejemplo, si un repositorio tiene los directorios foo/ y bar/, no hay forma de obtener solo el directorio bar/. En otras palabras, Mercurial siempre opera en instantáneas de todo el proyecto.

+1

Parece que la historia es algo importante para Mercurial. Y siempre incluirá toda la historia. – DeepNightTwo

+4

Cambié la terminología en la respuesta a lo que normalmente usamos en Mercurial: hablamos de clones "poco profundos" cuando solo obtienes parte de la historia y clones "angostos" cuando solo obtienes parte del árbol de archivos. –

+3

Las personas han hecho prototipos para clones poco profundos, pero todavía no forman parte de la distribución principal. –

4

Una vez que haya clonado un repositorio, para obtener el código de la "sugerencia" (la última versión de la rama actual - la predeterminada si no es precisa) solo necesita update.

Tiene una acción de actualización en TortoiseHG. Una vez hecho esto, puede mirar los archivos en la carpeta.

Si deseaba otro estado del repositorio (una versión antigua o un estado antiguo etiquetado), sigue siendo el comando update, con otros parámetros (consulte los documentos o la interfaz TortoiseHG).

+0

¡Gracias por lo que me dijiste! – DeepNightTwo

3

Si solo quiere el código más reciente y no tiene la intención de hacer nada relacionado con el repositorio, como commit o versiones anteriores, o lo que sea, depende de dónde obtuvo el código de y cómo

Si está utilizando uno de los servicios de alojamiento, como bitbucket, generalmente hay un enlace de descarga que le proporciona solo el código fuente.

Por ejemplo, si vas here, hay un "Obtener código" enlace hacia arriba y hacia la derecha, que le da algunas opciones en el formato de archivo (zip o lo que sea.)

Si tienes los archivos en alguna parte de lo contrario, debe explorar la interfaz desde la que los obtuvo. Intenta pegar el enlace desde el que clonaste en tu navegador y mira lo que obtienes.

+0

Necesito tomar operaciones como registrar y agregar archivos. Aún estoy tratando a Mercurial como SVN ... – DeepNightTwo

2

Sure. Clona el repositorio y luego elimina el subdirectorio .hg.

+0

El problema es que sigue emitiendo mucho tiempo para clonar todo el repositorio. Parece que tiene que ... – DeepNightTwo

+0

En realidad no es una solución tan mala. – Marian

5

La forma más fácil de lograr lo que quiere:

hg archive [destination folder] 
0

Para tirar sólo un subconjunto de los conjuntos de cambios, especifique una o más revisiones identificadores con -r/- rev o ramas con -b/--rama. El clon resultante contendrá solo los conjuntos de cambios especificados y sus antepasados.

e.g. hg clone -b NeededBranch http://example.com/myRepo

Mercurial manual

+1

La pregunta era cómo clonar sin sacar la historia, sacar a los antepasados ​​todavía va a sacar mucha historia en la mayoría de los casos de uso. –

+0

@YaakovKuperman: Podría ser que está bien extraer el historial una vez, si a partir de ese momento se corta el historial. Pero tienes razón, en la mayoría de los casos esto no reducirá mucho el tamaño total de la historia. Esta técnica es más útil para lidiar con situaciones complicadas de conflicto de fusión. – Yitz

2

Puede ser que sea un poco tarde, pero en realidad es posible olvidar un poco de historia con Mercurial. Solo necesita habilitar la extensión de conversión desde su archivo mercurial.ini o.archivo hgrc.

[extensions] 
hgext.convert= 

Ahora usted es capaz de utilizar la extensión convertido al "clon" solamente de cambios a partir de la revisión especificada.

hg convert --config convert.hg.startrev=[wheretostart] path_to_full_history_repo path_to_new_repo 

Ten en cuenta que esta no es la misma operación con el clon de Hg. Es por eso que el repositorio de origen debe ser un repositorio local. Por ejemplo si tenemos un repositorio en MiProyecto carpeta y queremos olvidar todos los cambios realizados antes de la revisión 100. Podemos utilizar el siguiente comando:

hg convert --config convert.hg.startrev=[100] MyProject MyShrinkedProject 

si se va a utilizar este repositorio encogida en un "centro servidor "recuerda cuidar de que todo el mundo lo clone antes de seguir trabajando". Los repositorios ya no son compatibles entre sí.

+0

Esta respuesta supone que está bien obtener una clonación completa una vez y, a partir de ese momento, usar solo una clonación parcial. Es una buena solución si necesita algo del historial, pero solo regresa a una cierta revisión. Si desea comenzar de nuevo sin historial: 1. Comience con un clon completo. 2. Ejecute el manifiesto de hg y guarde el resultado en un archivo. 3. Borre la carpeta .hg. 4. Ejecute hg init. 5. Ejecute hg add en la lista de archivos guardados. – Yitz

Cuestiones relacionadas