публикация веб-сайта с помощью экспорта svn

В настоящее время я загружаю все свои файлы на свой веб-сайт, когда делаю обновление (через медленное соединение adsl)

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

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

так что мои вопросы

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

ИЛИ будет проще сделать проверку svn и svn обновлять ее все время вместо экспорта svn и просто скрывать папки .svn с помощью apache htaccess

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

может быть, есть какие-то ошибки, о которых я не подумал, с которыми кто-то еще сталкивался

дебиан/апач/php


person bumperbox    schedule 21.07.2009    source источник


Ответы (5)


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

person Draemon    schedule 21.07.2009
comment
RewriteEngine на RewriteRule .*\.svn/.* - [F] - person Darren Newton; 21.07.2009
comment
‹FilesMatch \.svn/.*› запретить заказ, разрешить отказ от всех ‹/FilesMatch› - person Darren Newton; 21.07.2009
comment
Не удалось заставить директиву FilesMatch работать, так как она не соответствует каталогам, однако DirectoryMatch работал нормально: ‹DirectoryMatch \.svn› порядок разрешить, запретить запретить для всех ‹/DirectoryMatch› - person Miquel; 06.12.2009

Вот что я делаю на своем хосте:

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

~/projects/myproj
~/public_html/myproj

Первый каталог - это проверка из SVN, а второй - просто экспорт svn.

У меня есть небольшой скрипт 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

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

person RaYell    schedule 21.07.2009
comment
что происходит с файлами, которые вы удалили из svn, вы удаляете их вручную? - person bumperbox; 21.07.2009
comment
добавьте rm -Rf $TARGET$x после команды обновления svn в скрипт выше, и вам больше не придется беспокоиться об этом - person RaYell; 21.07.2009

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

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

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

person Pascal MARTIN    schedule 21.07.2009

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

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

person Eamon Nerbonne    schedule 21.07.2009

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

person Joey Rivera    schedule 10.11.2011