Так вот, самый простой и удобный способ это сделать - это воспользоваться Bazaar. :) Почему?
- Bazaar, в отличии от SVN, умеет определять переименования и перемещения файлов автоматически.
- Bazaar, в отличии от SVN, хранит свою информацию в одной папке в корне. А не в каждой подпапке. Что позволяет просто грохнуть все выгруженное дерево, и пересоздать его заново.
- Bazaar умеет работать с SVN-репозиториями как со своими собственными, и может быть использован как SVN-клиент.
1) Готовим папку для проекта в SVN-репозитории. Пусть это будет, скажем, https://sources/svn/server/trunk
2) Делаем ее чекаут:
bzr checkout https://sources/svn/server/trunk Server
cd Server
3) Пусть внутри Server перегенерируется дерево файлов с выгруженными объектами БД. Изменяются, добавляются, удаляются, переименовываются - неважно. Для коммита в SVN нам достаточно дать три команды:
Определим переименования:
bzr mv --auto
Учтем добавленные:
bzr add .
А удаленные удалятся сами:
bzr commit -F commit-message.txt < credentials
В файл credentials кладем пару логин-пароль, на разных строках. Не забываем дать enter в конце второй строки. И не забываем исключить этот файл из коммита:
bzr ignore credentials
Вообще - то, что для SVN-репозитория не запоминаются credentials - это косяк.
Далее, аккуратно раздаем на все права, заводим пользователя, под которым будет работать скрипт - и бинго. Все работает. Единственное - надо не забыть представить новозаведенного пользователя Базару. Сделать из под него следующее:
И все. Просто, и симпатично. Может, кому пригодится.
PS: Впрочем, для данной задачи совсем не обязательно хранить результат в SVN :). Bazaar-у практически без разницы - SVN-репозиторий по ссылке, или его родной, Bazaar-овский. Он формат SVN-репозиториев поддерживает родным образом -как свой собственный.
PPS: Для тех, кто переживает, что Базаар-хостингов в сети мало - или что Bazaar не является корпоративным стандартом - не переживайте. Любой SVN-хостинг или сервер - ваш.