Ответ 1
Вы можете сбрасывать его, а затем перезагружать его в подкаталог нового репозитория:
svnadmin dump http://oldrepo/ > mydump
загрузка svnadmin --parent-dir my/new/folder http://newrepo/ < mydump
В настоящее время у меня есть репозиторий корневого уровня для каждого проекта, например:
Project1
Project2
Project3
Project5
Project5
Я хотел бы реорганизовать это так, чтобы вместо репозитория для каждого отдельного проекта у меня только один для каждой логической группировки, а затем проекты были бы просто папками в этих "групповых хранилищах", например:
WebSites
Project1
Project2
DesktopApps
Project3
Libraries
Project4
Project5
Возможно ли это, сохранив историю существующих репозиториев? Я немного огляделся, но все, что я могу найти, - это перемещение папок в пределах одного репозитория и перемещение папок из репозитория в новый репозиторий.
Это только для личных вещей, так что это не конец света, если это просто "нет", но было бы хорошо знать, поэтому я не просто ударяю головой о стену:)
Вы можете сбрасывать его, а затем перезагружать его в подкаталог нового репозитория:
svnadmin dump http://oldrepo/ > mydump
загрузка svnadmin --parent-dir my/new/folder http://newrepo/ < mydump
Вы можете использовать tailor для импорта изменений в новый репозиторий. Он проверяет код из старого репозитория на одну ревизию за другим и передает его в новый репозиторий.
Это также можно использовать для преобразования истории одного типа системы управления версиями в другую.
Файл проекта с портретом будет выглядеть следующим образом:
[DEFAULT]
root-directory = /var/tmp/tailor
verbose = true
[myproject]
source = svn:oldrepo
target = svn:newrepo
start-revision = INITIAL
[svn:oldrepo]
repository = svn://oldhost.example.com/svnroot
module = trunk
subdir = repo-in
[svn:newrepo]
repository = svn://newhost.example.com/some/path
module = trunk
subdir = repo-out
Если этот файл называется settings.cfg
, он скопирует /trunk
старого репозитория, изменив его на новое местоположение:
tailor --configfile=settings.cfg myproject
Целевой репозиторий должен уже существовать и, вероятно, должен иметь пустой подкаталог trunk
.
Поскольку принятый ответ неполный и не был исправлен, вот как вы на самом деле это делаете.
(1) Ваше исходное репо представляет собой однопроектное репо с топором верхнего уровня foo
. Перейдите на старый сервер и создайте файл дампа:
[old-server]$ svnadmin dump /path/to/old-repo > foo.dump
(2) В вашем целевом репо уже есть два проекта: с dirs верхнего уровня bar
и baz
и находится в http://new-server/svn
. Теперь создайте дополнительный foo
верхний уровень:
[client]$ svn ls http://new-server/svn/
bar/
baz/
[client]$ svn mkdir -m "Adding new foo project" http://new-server/svn/foo
[client]$ svn ls http://new-server/svn/
bar/
baz/
foo/
(3) На вашем новом сервере репо находится в /path/to/new-repo
(что соответствует http://new-server/svn/
). Обратите внимание, что svn mkdir
выше не создавал новый каталог в /path/to/new-repo
; он просто изменил базу данных. Перейдите на новый сервер и
[new-server]$ svnadmin load /path/to/new-repo --parent-dir foo < foo.dump
Готово, с полной историей. Теперь вы можете проверить foo
как:
[client]$ svn co http://new-server/svn/foo foo
Если вы впервые выполнили svnadmin
, вы можете обнаружить ошибки разрешения файлов (txn-current-lock
/etc), если, например, репо принадлежит apache
, а вы 'не в группе apache
. Самое простое исправление - добавить себя в группу apache
.