2010-09-01 12 views
13

Tengo el proyecto de Django de un cliente que estoy desarrollando localmente, usando Mercurial para el control de versiones. Llevé mi repositorio local a mi servidor remoto personal (donde guardo todos mis proyectos) y luego cuando llego a implementarlo (en cualquier servidor web) clono ese repositorio allí desde mi servidor personal.¿Cómo clonar un repositorio de Mercurial en un directorio que ya existe?

Esto funciona bien en la mayoría de los servidores (donde tengo control total) pero tengo algunos proyectos en los que estoy implementando en WebFaction. WebFaction es genial, pero un poco inusual con su configuración, ya que primero necesito declarar el proyecto Django como una 'aplicación' a través de su panel de control. Esto crea algunas cosas automáticamente, como una carpeta 'apache2', 'myproject', etc. Es esta misma carpeta donde quiero clonar el repositorio desde mi servidor remoto personal. Sin embargo, hacer el comando hg clone habitual simplemente no funciona, ya que dice que la carpeta de destino ya existe. No hay mucho que pueda hacer sobre el contenido de esta carpeta realmente, así que tengo que trabajar en esto.

No soy un experto en Mercurial y la única manera en que podría parecer resolverlo es clonarlo en otra carpeta y luego mover todos los contenidos (incluido el .hg) a la carpeta real que quiero. Esto parece tonto ...

Estoy usando Mercurial v1.6.2 (instalado a través de easy_install). ¿Alguien podría compartir algo de luz sobre esto?

Muchas gracias.

+0

Usted no es el único que se ha topado con esta función de mercurial: http://mercurial.selenic.com/bts/issue1462 – msw

Respuesta

1

En general, parece que está intentando utilizar Mercurial como administrador de instalación, que ciertamente no es su objetivo de diseño.

Si le leo correctamente, parte de su repositorio de origen debe ser algo así como make deploy que coloca los archivos en sus lugares apropiados. Dicho de otra manera, tener un clon de repositorio (en .hg) en su directorio de implementación parece extraño y propenso a problemas.

+1

En realidad, mucha gente lo hace y funciona bastante bien. Usualmente, uno hace un 'push' a un servidor de producción que tiene el 'gancho changegroupq que hace una' actualización' automática. Hay muchas preguntas aquí en el desbordamiento de pila donde se recomienda tal configuración. Usar una etiqueta de 'producción' o similar como objetivo para la actualización automática funciona muy bien. –

+0

@ Ry4an: Aquí hay al menos un argumento de contador que menciona los mismos problemas que me preocupan. No es "correcto", pero fue el único relevante que mi búsqueda apareció y me gustaría ver a un representante del otro lado. Si está utilizando un enlace de confirmación, parece que debe haber un script de "instalación" implícito que simplemente se desencadena desde hg. Nunca hice un despliegue directo, así que me gustaría saber qué "bote" me he perdido. http://stackoverflow.com/questions/2361708/using-hg-repository-as-web-site – msw

+0

Después de volver a ver mi proyecto, debo estar de acuerdo con msw.Estoy complicando las cosas aquí, parece que debería ser solo la versión que controla mi carpeta de proyecto Django real y no cosas a su alrededor. En esta situación, eso tiene sentido. Gracias. – littlejim84

10

Puede copiar solo la carpeta .hg, luego revertir o actualizar para dar propina. Por ejemplo:

cp -a src/.hg dest/ 
cd dest 
hg up -C 
1

puede mover la carpeta después del hecho, o simplemente puede hacer un enlace simbólico a la misma. mi directorio de webfaction en realidad está enlazado, así que sé que funciona bien.

21

Copiar solo el dir .hg definitivamente funciona, pero también puede hacer un hg init y luego hg pull http://remote/repo. Un repositorio que acaba de ser inicializado solo tiene el conjunto de cambios 000000000000000, por lo que puede extraer de cualquier repositorio sin obtener la advertencia de "repos sin relación". Esto es esencialmente lo mismo que hg clone --pull con un inicio manual.

+2

gracias! Me enseñaste una muy buena sugerencia de hg :-) +1 –

+0

Tuve que 'actualizar hg' después de tirar. Saqué con una revisión específica '-r X' – juanmirocks

Cuestiones relacionadas