2011-03-15 9 views
11

Trabajo con un socio en un sitio PHP para un cliente. Tenemos un repositorio de Mercurial común (en Bitbucket), tanto copias locales como el sitio en vivo. Solo tenemos acceso FTP al sitio en vivo (que no puede modificarse, ya que es un paquete de alojamiento con FTP solamente).Obtener cambios de mercurial al sitio FTP

Deseo poder realizar cambios desde el repositorio al sitio en vivo.

Hasta ahora solo mantengo un registro de los archivos modificados en el repositorio y los copio manualmente con FileZilla, una tarea propensa a errores y molesta. Mi idea es montar la ubicación remota localmente (es decir, usando CurlFtpFS) y decirle a mercurial que copie automágicamente archivos cambiados al sitio. Idealmente, quiero poder especificar los cambios, pero esto sería una ventaja. Sería suficiente si el estado local de los archivos dentro del repositorio se sincroniza.

¿Hay alguna forma de hacerlo con las herramientas de línea de comandos de Linux?

Respuesta

7

Mi primera recomendación es, si es posible, obtener un paquete que permita más acceso. FTP solo es brutal.

Pero ya que usted está buscando una verdadera respuesta a su pregunta, yo tengo dos ideas para usted:

  1. Yo sugeriría mirar en el mercurial FTP Extension. Personalmente, nunca lo he usado, ya que nunca me he visto atascado en una situación de solo ftp (al menos no por mucho tiempo), pero parece prometedor. Parece que si se asegura de etiquetar sus lanzamientos de producción, funcionará muy bien para usted. (asegúrese de utilizar el parámetro -uploaded)

  2. Además, si solo desea que la punta se instale en su entorno de producción, entonces podría consultar la sugerencia Martin Geisler made on the bitbucket user group hace unos días. Básicamente, su sugerencia es utilizar la funcionalidad "ping url" de bitbucket. Tendría que escribir un script/url handler del lado del servidor que aceptaría ese ping, luego buscar la sugerencia de bitbucket (como un zip) y luego descomprimir/descomprimirlo. Esto es un poco complicado, pero si está buscando una automatización completa y la sugerencia siempre será la mejor, esto podría funcionar para usted.

+0

Creo que voy a ir a la extensión de FTP. Gracias. –

+0

¡Estoy usando la extensión de FTP ahora mismo, y es increíble! Sin embargo, falta compatibilidad con el subrepo, pero seguro que es mucho mejor que tener que encontrar manualmente los archivos correctos para cargar y cosas ... – Svish

+2

Acerca de la opción 2, diría que podría ocasionar un desastre después de un tiempo con archivos (re) movidos y tal. – Svish

2

Una idea es el uso del comando hg archive:

hg archive /path/to/curlftpsfs 

que pondrá una instantánea de la cesión temporal en ese lugar - sin embargo, se sobreponen a cualquier archivo que ya existe.

Otra opción es crear un clon de Mercurial en ese mismo /path/to/curlftpsfs y luego simplemente hacer un hg pull ; hg update en su sistema local con el remoto montado. Configurarlo inicialmente significará transferir todo, pero posteriormente solo enviarás deltas.

A algunas personas no les gustan estas últimas opciones porque también expone su repositorio entero /.hg, pero puede bloquear el acceso a eso en el servidor web.

0

solución de Windows:

BeyondCompare (http://www.scootersoftware.com/) es una impresionante pieza de software. Además de ser impresionante, puede reflejar su carpeta local en el sitio FTP. Está comparando archivos y solo transfiere novedades.

1

Me encontré con este problema hace un tiempo después de cambiar de AWS a un alojamiento web local que proporciona solo ssh/ftp.

Mi enfoque anterior de actualizar un sitio de producción en AWS utilizando "hg pull; hg update -C" ya no se puede usar en el nuevo alojamiento web. No tienen mercurial instalado para hosts compartidos.

Entonces, lo que hice fue montar la ubicación remota usando ftp, a una máquina local (es decir, su computadora portátil), luego ejecutar los comandos hg pull y actualizar localmente en su máquina en la ruta donde se montó el sitio ftp remoto .

Cuestiones relacionadas