2009-07-21 15 views
7

actualmente ftp, todos mis archivos a mi sitio web cuando hago una actualización (a través de una conexión ADSL slowish)la publicación de un sitio web utilizando svn export

Y quiero hacer las cosas más fáciles, así que sólo recientemente comenzó a usar a Alojado svn service, y pensé que podría acelerar un poco las cosas haciendo una exportación svn de mi sitio web directamente a mi servidor web

lo he intentado un par de veces y parece funcionar bien, sin embargo, capta todo el sitio cada vez que es un poco lento para una actualización de 1 archivo

así que mis preguntas son

es posible hacer una exportación y sólo conseguir los cambios desde la última exportación (¿Cómo va a manejar archivos borrados?)

o será más fácil hacer un svn checkout y SVN actualizar todo el tiempo en su lugar de exportación de sVN y simplemente ocultar las carpetas .svn usando .htaccess de Apache

es una buena idea, o hay una mejor manera de publicar mi página web que estoy tratando de lograr el tipo de despliegue 1 clic ideales

tal vez hay algunos gotcha que no he pensado que alguien más se haya topado con

debian/apache/php

Respuesta

8

Me gustaría hacer una comprobación de svn, y lo he hecho con éxito en un sitio en vivo durante varios años. Sin embargo, debe agregar reglas mod_rewrite a 404 los directorios .svn (y archivos).

+0

RewriteEngine en RewriteRule * \ SVN /.* - [F] –

+0

para negar, permitir Denegar de todos

+0

No se pudo hacer Directiva FilesMatch para trabajar, ya que no coincide en los directorios, sin embargo DirectoryMatch funcionó bien: para permitir, denegar denegar de todos Miquel

5

Esto es lo que estoy haciendo en mi host:

Por cada proyecto que tengo una estructura que se parece más a menos así:

~/projects/myproj 
~/public_html/myproj 

Primera dir es un checkout de SVN, mientras que el segundo uno es solo svn export.

que tienen un pequeño script bash

#!/bin/bash 
SOURCE="$HOME/projects/" 
TARGET="$HOME/public_html/" 
for x in `ls $SOURCE` 
do 
    if [ -d $SOURCE$x ]; then 
     svn update $SOURCE$x 
     svn export --force $SOURCE$x $TARGET$x 
    fi 
done 

exportación se realiza a partir de la copia de trabajo por lo que es muy rápido.

+0

lo que sucede con los archivos que se han eliminado de svn, ¿los eliminas manualmente? – bumperbox

+0

agrega un 'rm -Rf $ TARGET $ x' después del comando svn update en el script de arriba y ya no tendrás que preocuparte por eso – RaYell

1

Puede que no sea exactamente la respuesta que está buscando, pero si tiene un acceso SSH a su servidor web (depende de su servicio de alojamiento, algunos de "bajo costo" no brindan ese tipo de acceso), puede usar rsync para "sincronizar" el sitio remoto con lo que tiene en su disco.

En el pasado, estaba usando algo así como la idea que está describiendo (buscando el registro svn entre la última revisión empujada a producción y HEAD, analizando cada línea, y al final calculando qué enviar al servidor); pero no fue realmente un gran proceso; Ahora uso rsync, y me gusta mucho mejor.

(También en este caso, tendrá que excluir directorios .svn, por cierto)

0

Usted sólo puede aceptar tener directorios .svn en su sitio web (por lo general no es un problema esp. Si se configura para no permitir acceso a estos) - esta es la opción fácil. Alternativamente, haga lo que RaYell hace, y tenga dos copias de su sitio web en el servidor web. Una salida normal fuera del directorio web y otra en su directorio web.Cuando actualice, simplemente exporte el svn (solo una copia con .svn dirs eliminados) en el directorio web (y debe asegurarse de eliminar primero los archivos antiguos si desea evitar que los archivos que se han eliminado de SVN permanezcan en su sitio web))

Hago algo como esto, usando robocopy establecido para duplicar el checkout svn excluyendo directorios .svn, y obtengo tanto la exportación como la eliminación de archivos antiguos en un solo paso, minimizando así el tiempo de inactividad si la copia toma mucho tiempo. Estoy seguro de que esto también es fácil en Unix, si ese es su entorno de alojamiento. Por ejemplo, puede usar una rsync local: http://blog.gilluminate.com/2006/12/12/yes-you-can-rsync-between-two-local-directories/

0

Tema anterior, pero como esto es lo que surgió en Google durante mi investigación, pensé que podría agregar algo más. Recomiendo exportar al sitio en lugar de visitarlo. Me gusta mantener los repositorios y los sitios separados. Tampoco recomiendo exportar todo el repositorio al sitio cada vez, especialmente si solo cambian unos pocos archivos a la vez. Lo que puede hacer en su lugar es hacer una diferencia en el repositorio para ver qué ha cambiado de una versión a otra y solo exportar esos archivos. Más información en:.. http://www.joeyrivera.com/2011/automate-svn-export-to-site-w-bash-script/

Cuestiones relacionadas