2009-07-21 2 views
7

я в настоящее время FTP всех мои файлов на мой сайт, когда я сделать обновление (по slowish связи скоростной)публикация веб-сайта с помощью экспорта SVN

И я хочу, чтобы сделать вещи проще, так что я только недавно начал использовать размещаемый svn service, и я думал, что могу немного ускорить процесс, сделав экспорт svn моего веб-сайта прямо на мой веб-сервер.

Я пробовал это несколько раз и, похоже, работает нормально, однако он извлекает весь сайт каждый раз, что немного медленнее для обновления 1 файла

поэтому мои вопросы

возможно сделать экспорт и получить только изменения с момента последнего экспорта (как это будет обрабатывать удаленные файлы?)

или это будет проще сделать SVN Checkout и SVN обновить все время вместо экспорт СВЕН и просто скрыть папки .svn с помощью апачского HTAccess

это хорошая идея, или есть лучший способ опубликовать свой веб-сайт я пытаюсь достичь 1 клики типа Deploy идеального

может быть есть некоторые gotcha, я не думал о том, что кто-то еще столкнулся с

debian/apache/php

ответ

8

Я бы сделал svn checkout и сделал это успешно на живом сайте в течение нескольких лет. Вы должны добавить mod_rewrite правила 404 каталогов .svn (и файлов).

+0

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

+0

заказ отрицать, позволяют отрицать от всех

+0

не удалось сделать директива FilesMatch работать, поскольку он не соответствует по каталогам, однако DirectoryMatch работал отлично: заказ разрешить, запретить отрицать от всех Miquel

5

Это то, что я делаю на моем хосте:

Для каждого проекта у меня есть структура, которая выглядит более менее так:

~/projects/myproj 
~/public_html/myproj 

Первый реж является выписка из SVN, а второй один - только экспорт svn.

У меня есть небольшой Баш скрипт

#!/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 

Экспорт осуществляется из рабочей копии, так что это очень быстро.

+0

, что происходит с файлами вы удалили из svn, вы удаляете их вручную? – bumperbox

+0

добавьте команду rm -Rf $ TARGET $ x' после svn update в приведенном выше скрипте, и вам больше не придется беспокоиться о них – RaYell

1

Возможно, это не тот ответ, который вы ищете, но если у вас есть SSH-доступ к вашему веб-серверу (это зависит от вашего хостинга, некоторые «низкие затраты» не дают такого доступа) вы можете использовать rsync для «синхронизации» удаленного сайта с тем, что у вас на диске.

В прошлом я использовал что-то вроде идеи, которую вы описываете (выборка журнала svn между последней версией, нажатой для производства и HEAD, анализ каждой строки и, в конце концов, вычисление того, что нужно отправить на сервер); но это был не очень хороший процесс; Теперь я использую rsync, и мне нравится лучше.

(Здесь тоже придется исключить .svn каталоги, кстати)

0

Вы можете просто принять имеющие .svn каталоги на вашем сайте (как правило, не является проблемой, особенно если настроить его, чтобы не допустить доступ к ним) - это простой вариант. В качестве альтернативы, сделайте то, что делает RaYell, и у вас есть две копии вашего веб-сайта на веб-сервере. Одна нормальная проверка вне веб-каталога и одна в вашем веб-каталоге.Когда вы обновляете, просто экспортируйте svn (только копию с удаленными .svn dirs) в веб-каталог (и вы должны сначала удалить старые файлы, если хотите избежать удаления файлов, удаленных из SVN, оставаясь на вашем веб-сайте).

Я делаю что-то вроде этого, используя robocopy, чтобы зеркально отобразить svn checkout, исключая каталоги .svn, и получить как экспорт, так и удаление старого файла за один шаг, что минимизирует время простоя, если копия занимает много времени. Я уверен, что это тоже легко в unix, если это ваша среда хостинга. Например, вы можете использовать локальный rsync: http://blog.gilluminate.com/2006/12/12/yes-you-can-rsync-between-two-local-directories/

0

Старая тема, но так как это то, что появилось в Google во время моих исследований, я подумал, что добавлю к этому. Я рекомендую делать экспорт на сайт, а не проверять его. Мне нравится хранить репозитории и сайты отдельно. Я также не рекомендую экспортировать весь репо на сайт каждый раз, особенно если только несколько файлов изменяются за раз. Вместо этого вы можете сделать различие в репо, чтобы узнать, что изменилось с релиза на другой, и только экспортировать эти файлы. Более подробную информацию по адресу:.. http://www.joeyrivera.com/2011/automate-svn-export-to-site-w-bash-script/

Смежные вопросы