Перенос части хранилища Subversion на новый сервер и повторное размещение - PullRequest
4 голосов
/ 23 марта 2011

Я пытаюсь перенести часть хранилища Subversion на новый сервер Subversion.

http://server1/svn/repo1/path1/path2/path3 -> http://server2/svn/repo2/path3

Я создал полный дамп с помощью:

svnadmin dump repo1 > repo1.dump

Фильтрация дампа через:

svndumpfilter include /path1/path2 --drop-empty-revs < repo1.dump > repo1_filtered.dump

Через Cygwin sed я заменяю / path1 / path2:

sed -e 's,^Node-path: WM/BI,Node-path: ,' < repo1_filtered.dump > repo1_fixed.dump

При попытке импорта дампав новый / пустой репозиторий я получаю следующую ошибку:

<<< Started new transaction, based on original revision 32
 * adding path :  ...svnadmin: File already exists: filesystem 'bi\db', transaction '0-2', path ''

Я считаю, что проблема в том, что svndumpfilter включает в себя путь / путь1 / путь2.На самом деле, я хочу только детей / path1 / path2.После запуска sed в начале файла repo1_fixed.dump я нахожу:

2010-03-10T15:56*:59.595747Z
PROPS-END

Node-path:
Node-action: add
Node-kind: dir
Prop-content-length: 10
Content-length: 10

PROPS-END

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

Есть предложения о том, какЯ должен продолжить?

1 Ответ

2 голосов
/ 15 апреля 2011

Я довольно легко воспроизвел вашу проблему, а вы правдивы в отношении своего анализа. Проблема заключается в ревизии, создающей базовую папку.

Если вы удалите эту транзакцию из дампа, она будет правильно импортирована

 sed -e "s,^Node-path: rep1/rep3,Node-path: ," < temp_filtered.dump > temp_hacke.txt

Я сделал это вручную, это довольно просто: просто найдите строки с пустым Node-path: и удалите из предыдущего «Revision-number:» до следующего «PROPS-END». Некоторые python / awk / perl могут это сделать (я не пробовал).

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

Другое решение - импортировать репозиторий в одну папку вместо поддерева (в этом случае просто измените строку sed на Node-path: newPath)

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

...