2006-04-29

Экспорт файлов из Subversion

Есть у меня один проект, размер которого в данный момент ~25 MB. Огромный такой, и над ним постоянно, параллельно работают человек 5… Естественно, для того, что бы небыло конфликтов версий, используется Subversion, у каждого своя тестовая (рабочая) версия. Всё идёт хорошо, кроме того момента, когда надо обновлять боевой сервер.

Проблема в том, что за несколько дней разработки бывает от 10 до n-ного количества коммитов в репозиторий и изменяется огромное кол-во файлов, которые в конце какой-то итерации нужно поместить на боевой сервер. Ходить и отслеживать каждый раз через все коммиты, какие файлы изменялись, занимает много времени, хук (hook), который бы выкладывал все эти файлы отдельно я не нашёл (да и на больших коммитах оно тормозит немного тогда, уже пробовал, тем более там и так висит рассылка об изменённых файлах при коммите). У Subversion возможность экспортировать только изменённые файлы от ревизии А до ревизии Б я тоже не нашёл. Делать чек-аут (checkout) на сервер всего проекта из репозитория дело не самое весёлое - оно в таком случае занимает раза в 2 больше места.

Следовательно, для ускорения данной операции я создал себе вспомогательный скрипт на Ruby, с использованием уже установленного на системе Subversion. Ему подают как параметры начальную и конечную ревизию, изменения из которых он складывает в указанный ему каталог на жёстком диске.
Примеры:
exportrevs.rb -f 400 -t 500
exportrevs.rb --from 400 -to 500

Ничего сложного. С svnlook changed он проходит от ревизии до ревизии, собирает список изменённых или добавленных файлов и каталогов, а потом при помощи svnlook cat забираю файлы.

Первая версия данной утилиты сейчас испытывается мною, и пока найдены такие минусы:
Можно использовать только на компьютере, на котором находиться сам репозиторий.
Расчитан на поддержку одного проекта.

In English: about Export changed Files from Subversion from Revision A to Revision B

As a version control system I use Subversion. When a lot of developers work on a one big web-project, and you can’t checkout all project from repository to production server (checkout from subversion takes double the space needed), updating of production service becomes a headache. Every time to upload all files from export, after weeks of developing, takes lots of time. All we need is just to upload changed files.
I didn’t find any keys in Subversion, with which I would be able to export only changed files from repository, from revision A to revision B. So I wrote a script with Ruby which uses installed Subversion binaries to export only changed files from revision A to revision B into directory.

You must install this script on the same machine, as Subversion server is running on, configure it and just define revision numbers like that:
exportrevs.rb -f 400 -t 500
exportrevs.rb --from 400 -to 500

Script will look for changed files in commits from revision A to revision B with svnlook changed, populate changed files, and export them to directory with svnlook cat.

That’s all!

Blog — Сергей Куракин @ 20:54
Уже комментировало (1) »
  1. [...] Извечная моя проблема: есть проект в репозитории, его экспорт лежит на боевом сервере, в репозиторий делают определённое кол-во коммиротв, и есть нужда обновить боевой сервер. Делать экспорт из репозитория и заливать всё на сервер заново занимает слишком много времени, а чек-аут слишком много места на сервере. Репозиторий не даёт встроенной возможности сделать экспорт только изменённых файлов. Я сделал своё решение: Экспорт файлов из Subversion от ревизии А до ревизии Б Blog, Web, Ruby and Rails — Сергей Куракин @ 21:06 Комментариев по теме нет » [...]

RSS комментариев. TrackBack URI

Оставить свой комментарий