Часто возникает задача публикации (деплоя, deploy) файлов из SVN репозитория на сервере. Зачастую эта задача осложняется тем что SVN создает в каждой папке подкаталог .svn, который содержит кучу файлов. И этим файлам совсем не место на рабочем сервере.
Отчасти проблему можно решить если при копировании файлов игнорировать файлы и папки по маске. Но не все файловые менеджеры позволяют это делать. Встречал я людей которые сначала копировали файлы из репозитория в отдельную папку, а потом вручную или скриптов удаляли лишние. Так вот для таких случаев есть команда
svn export URL PATH
Таким образом можно выгрузить все файлы из репозитория по адресу URL в папку указанную в PATH. И это будет уже «чистая» версия, готовая к выгрузке на сервер.
Это все хорошо для тотального обновления. А для каких-то мелких правок надо выискивать измененные файлы и обновлять их на сервере. Но как оказывается это тоже уже автоматизировали.
Для пользователей Windows и клиента Tortoise SVN есть готовое решение. Сейчас уже не вспомню, но решение находится в интернете. А если методом тыка — выбрать репозиторий, выбрать просмотр лога изменений. Через Ctrl выбрать две ревизии, выбрать для них diff. А уже для diff выбрать export. В результате можно получить в отдельной папке набор файлов, которые были изменены между двумя выбранными ревизиями.
На Linux такой возможности сильно не хватает. Но как оказалось все вполне решается с помощью команд svn: diff и export. И все в результате автоматизируются средствами обычно bash скрипта.
В результате я написал вот такой скрипт: https://github.com/pwsdotru/svn_export
Скрипт позволяет указав путь до репозитория, экспортировать из него файлы в отдельную категорию. Экспортируются только те файлы, что были изменены начиная с указаной в параметрах ревизии.
Таким образом сценарий использования может следующим:
0. Перед началом работы запомнили/записали номер текущей ревизии. Не обязательно т.к. номер ревизии всегда можно посмотреть по логам.
1. Делаем правки, тестируем и делаем коммиты.
2. После тестирования делаем экспорт файлов и заливаем их на сервер.
В общем-то и все. Недостатком этого скрипта можно считать то что он никакх не обрабатывает ситуации с удалением файлов из SVN. Но недостаток мелкий, так как такое очень редко происходит.