Папка SVN в новый корень репозитория - PullRequest
2 голосов
/ 01 июня 2009

У меня есть существующий репозиторий SVN, в котором находится папка с моим проектом. Я хотел бы знать, есть ли способ создать новый репозиторий с папкой моего проекта, установленной в качестве его корня, и сохранить всю историю (журнал) Subversion вместе с ним. Обратите внимание, что я не против потерять исходные номера ревизий репозитория.

Спасибо.

Ответы [ 3 ]

2 голосов
/ 01 июня 2009

Решение Avi, вероятно, самое простое, но имеет недостаток в том, что новый репозиторий будет содержать полную историю всего, что находится за пределами этого одного проекта. В приведенном ниже примере я предполагаю, что вы находитесь в командной строке машины * NIX и находитесь в каталоге, в котором находится существующий репозиторий.

svnadmin create new-project-repo  # create new repo next to old repo
svnadmin dump old-project-repo | svnadmin load new-project-repo
svn mv file://$PWD/new-project-repo/my-project/trunk    file://$PWD/new-project-repo/trunk
svn mv file://$PWD/new-project-repo/my-project/branches file://$PWD/new-project-repo/branches
svn mv file://$PWD/new-project-repo/my-project/tags     file://$PWD/new-project-repo/tags
# ... svn rm file://$PWD/new-project-repo/XXX for all the cruft still at the top level.

Если вы используете subversion 1.6.x, svnsync предоставляет лучший вариант. До 1.6.x svnsync можно было использовать только для копирования целых репозиториев. С 1.6.x он получил возможность копировать только данное поддерево хранилища.

svnadmin create new-project-repo
# svnsync needs the ability to set revision properties, so we must install a pre-revprop-change
# hook script which just exits with status 0 (no error).  On *NIX systems, the program `true` will do this.
ln -s /usr/bin/true new-project-repo/hooks/pre-revprop-change  # possibly /bin/true
svnsync init file://$PWD/new-project-repo file://$PWD/old-project-repo/my-project
svnsync sync file://$PWD/new-project-repo
# go drink some coffee
2 голосов
/ 01 июня 2009

Вы можете скопировать хранилище вручную или с помощью svnadmin.

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

1 голос
/ 02 марта 2010

К вашему сведению: опция svnsync работала для меня с Subversion 1.5.3.

Кроме того, вот пакетный скрипт Windows, делающий то же самое:

SET OLD_REPO_URL = https://old -project-repo / my-project
SET NEW_REPO_URL = D: / Репозитории / new-project-repo
SET NEW_REPO_FILE_PATH = D: \ Репозитории \ new-project-repo

svnadmin create% NEW_REPO_FILE_PATH%
echo exit 0>% NEW_REPO_FILE_PATH% \ hooks \ pre-revprop-change.bat

Файл инициализации svnsync: ///% NEW_REPO_URL%% OLD_REPO_URL%
Файл svnsync: ///% NEW_REPO_URL%

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

...