LINUX.ORG.RU

Обновление сайта через SVN (принцеп работы)


0

1

Здравствуйте, многие используют SVN для автоматического обновление веб-проектов. Кто может объяснить принцип работы (не детально) этой системы?

К примеру существует:

a) Сайт.

b) SVN - рабочая версия (на ней делаем изменение в коде)

c) SVN-хранилище (скажем на сервере или на локальном ПК).

Вопросы:

1) Как представляется мне. Структура сайта - это есть рабочая копия. И после обновления хранилища, мы просто обновляем сайт как рабочую копию? Так это происходит?

Если так, то дополнительные вопросы.

2) Структура сайта динамична, в некоторых папках скажем лежат прикрепленные файлы и есть скажем файлы логи. И я так понимаю, что в SVN-хранилище хранятся только папки и файлы программного содержания (в том числе бинарные - статические изображения дизайна), и при обновление на сайте, динамическая часть останется нетронутой? Так? Или же рабочая копия почистить «лишнее»?

3) Как происходит обновление сайта и откат на предыдущею версию? Сначала закачиваются все новые файлы на рабочий сервер, и потом копируются внутри. Или же SVN качает по одному и сразу же обновляет?

4) Можно ли скажем получить измененные и новые файлы отдельно? Ну скажем я внес модификацию в код, и при этом хочу отдельно получить копии старых версий этих файлов и новых. Ну например чтобы можно было их залить вручную (или откатить на старую версию, без привязки сайта к SVN) или же сохранить как модификацию для публикации в инете и т. д.

1). можно и так, только тогда не забыть доступ к .svn убрать, можно через svn-export

2). svn pe svn:ignore на каталоги с динамическим контентом (загруженные файты и т.п.), то же самое и на все конфиги, чтобы не перетереть их и чтобы в svn не хранились рабочие настройки

3). командами svn.

4). man svn же!

и почему нет вопроса, что делать с базой данных?

qnikst ★★★★★ ()
Ответ на: комментарий от qnikst

qnikst 1) А какой вариант более приемлем?

2) Значит он удаляет то что ему не известно? Или он обновит только то что знает, не тронув другое (речь про обновление на сайте, а не создание хранилища).

3) Не понял ответ, суть вопроса как происходить обновление, понятно что командами svn, технический как, какой из вариантов которые я описал выше?

4) Я спрашиваю можно или нет достичь этого? Что за дурацкий ответ man, google... я и спрашиваю чтобы узнать узко-специализированный ответ не прибегаю к изучение объема книги. Если бы я хотел последнего я бы тут не спрашивал. Понятно что если меня модель управления эта удовлетворить я пойду изучать мануалы (или известную книгу).

list2009 ()
Ответ на: комментарий от list2009

Ну я так понимаю что с БД сделать нечего нельзя?

Смотря какой у тебя проект, и как оно устроено. Можешь хранить изменения структуры (т.е. команды ALTER TABLE) в файле в svn, и применять их скриптом. Если у тебя какая-нибудь джанга, то есть south.

И, вообще, лучше hg или git, а не svn - так проще с полноценными рабочими копиями, удобнее откатывать результат прям на месте, и т.д.

anonymous ()
Ответ на: комментарий от list2009

можно. либо какие-нибудь хитрые самописные скрипты, например, все обновления хранить в ./sql/yyyy-mm-dd-patchname.sql и хуком или вкучную прогонять обновление, которое из под нужного юзера обновляет ещё не выполненые файлы. Либо если пользуешь какие-нить ORM-то поддержка может быть там.

qnikst ★★★★★ ()

И я так понимаю, что в SVN-хранилище хранятся только папки и файлы программного содержания (в том числе бинарные - статические изображения дизайна), и при обновление на сайте, динамическая часть останется нетронутой? Так? Или же рабочая копия почистить «лишнее»?

Если там ignore, то ничего никто чистить не будет. Игнорировать надо сразу всю динамику, ну и файлы настроек с паролями к БД тоже.

4) Можно ли скажем получить измененные и новые файлы отдельно? Ну скажем я внес модификацию в код, и при этом хочу отдельно получить копии старых версий этих файлов и новых

Скачал предыдущую ревизию и залил.

anonymous ()
Ответ на: комментарий от list2009

1) А какой вариант более приемлем?

а чёрт знает, с export-ом конфигурации потестить не успел, а сейчас сменил напраление работы. Нужно брать и смотреть, что получается и устраивает ли

2). удаляет только то, что со статусом удалённое, что не знает не трогает. svn ingore скажет svn-ну вобще не смотреть на указанные каталоги, так что их обновление при разработке и при эксплуатации вобще никак не будет мешать.

3). обновление: svn up [лучше перечислить файлы]. откат svn merge -r$FROM:$TO. и т.д.

4). > Можно ли скажем получить измененные и новые файлы отдельно? Ну скажем я внес модификацию в код, и при этом хочу отдельно получить копии старых версий этих файлов и новых.

svn export -r1 ; svn export -r2 например. Возможно для конкретной задачи лучше теги.

дурацкий ответ, потому, что возможности svn изучаются за час на уровне, на котором их хватит 90% рабочего времени, а подобную операцию должна уметь любая VCS.

А вобще согласен с анонимным другом, что если есть возможность то лучше использовать hg или git. Лично у меня с svn было много проблем, т.к. не с ним не хочется плодить ветки, иногда другие разрабы тупили и приходилось с трудом разгребать последствия, а так многие проблемы бы автоматом можно было решить.

qnikst ★★★★★ ()
Ответ на: комментарий от qnikst

2). удаляет только то, что со статусом удалённое, что не знает не трогает. svn ingore скажет svn-ну вобще не смотреть на указанные каталоги, так что их обновление при разработке и при эксплуатации вобще никак не будет мешать.

Ну вот ситуация, если папка там лежит файл «index.html» он для работы нужен, но так же в папке тысяча прикрепленных файлов - динамика. В хранилище у меня скажем отмечен только папка и этот файл, при обновление он проанализирует наличие папки и этого файла, про динамический файлы ему не известно, он проигнорирует что там 1000 файлов?

3). обновление: svn up [лучше перечислить файлы]. откат svn merge -r$FROM:$TO. и т.д.

Да мне не нужно знать образцы команд, меня интересует как он обновление делает на сервере (получая с хранилища, хранилище есть удаленная машина). 1) Сначала загружает все на сервер во временную папку и потом обновляет загруженное. 2) Загружает файл и обновляет сразу же, по мере загрузке файлов.

Для пункта 4. Опять же речь не про получение рабочей копии номера ревизии, мне нужно получить именно изменившиеся файлы. Любой движок это тысячи файлов, я изменил только 2 - сможет ли мне SVN их выдать (о том что они изменились он знает, но есть ли возможность получить их отельно?)

PS Мне не важно техническая сторона, команды можно не писать, мне интересует принцеп работы по выше написанным вопросам.

list2009 ()
Ответ на: комментарий от anonymous

Скачал предыдущую ревизию и залил.

ну да отредактировал 4 файла, заливаешь тысячи минут 20. И потом бах проблема, и откат заливаешь 20 минут, и снова какие то проблемы.

list2009 ()
Ответ на: комментарий от list2009

Ну вот ситуация, если папка там лежит файл «index.html» он для работы нужен, но так же в папке тысяча прикрепленных файлов - динамика. В хранилище у меня скажем отмечен только папка и этот файл, при обновление он проанализирует наличие папки и этого файла, про динамический файлы ему не известно, он проигнорирует что там 1000 файлов?

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

но можно сделать svn pe svn:ignore ./dir и написать так ^index.html (точнее в документации смотреть, я не помню wildcard-ы которые там поддерживаются).

в твоём же случае если не делать svn ignore, он лишь предложит добавить все файлы, и не будет ими никак управлять, но лучше сделать.

Да мне не нужно знать образцы команд, меня интересует как он обновление делает на сервере (получая с хранилища, хранилище есть удаленная машина). 1) Сначала загружает все на сервер во временную папку и потом обновляет загруженное. 2) Загружает файл и обновляет сразу же, по мере загрузке файлов.

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

Для пункта 4. Опять же речь не про получение рабочей копии номера ревизии, мне нужно получить именно изменившиеся файлы. Любой движок это тысячи файлов, я изменил только 2 - сможет ли мне SVN их выдать (о том что они изменились он знает, но есть ли возможность получить их отельно?)

ответ на конкретный вопрос: не знаю мне ни разу это не было нужно. а зачем?

qnikst ★★★★★ ()
Ответ на: комментарий от list2009

откуда у тебя могут быть проблемы, если ты не делаешь изменения на сервере?

qnikst ★★★★★ ()

в общем единственное решение это держать на сервере рабочую копию сайта?

Но вот есть сайт, можно залить только папку .svn? Ну то есть чтобы не совершать «checkout»? Или просто скопировать .svn с локальной рабочей копии?

list2009 ()
Ответ на: комментарий от list2009

в общем единственное решение это держать на сервере рабочую копию сайта?

Вот это и есть DVCS. Бросай ты этот svn поскорее.

anonymous ()

Будешь держать на сервере рабочую копию сайта - на забудь запретить доступ ко всем папкам .svn. Например в .htaccess

RewriteRule ^.*.svn.*$ - [F]

ибо хранятся там исходники в виде незакодированном.

r_asian ☆☆☆ ()
Ответ на: комментарий от anonymous

Вот это и есть DVCS. Бросай ты этот svn поскорее.

А что альтернативой предложите.

PS вообще по не использовал, просто хочу автоматизировать процесс внесения модификаций.

Будешь держать на сервере рабочую копию сайта - на забудь запретить доступ ко всем папкам .svn. Например в .htaccess

r_asian, Ок, спасибо, знаю про это.

list2009 ()
Ответ на: комментарий от list2009

А что альтернативой предложите.

Стоит выбирать из hg и git, но это очень флеймообразный вопрос.

Я бы лично посоветовал hg (mercurial) - он проще и понятнее, в отличие от git-а, где некоторые вещи делаются довольно хитро, и команды иногда напоминают однострочники на perl-е.

Как минимум, сам выкладываю сайты через hg, всем доволен.

anonymous ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.