Могу ли я переместить существующий репозиторий Subversion в новый родительский репозиторий (и сохранить историю)? - PullRequest
30 голосов
/ 26 января 2009

В настоящее время у меня есть хранилище корневого уровня, настроенное для каждого проекта, например:

Project1
Project2
Project3
Project5
Project5

Я хотел бы реорганизовать это так, чтобы вместо репозитория для каждого отдельного проекта у меня был только один для каждой логической группировки, и тогда проекты были бы просто папками в этих «групповых репозиториях», например:

WebSites
    Project1
    Project2
DesktopApps
    Project3
Libraries
    Project4
    Project5

Возможно ли это вообще при сохранении истории существующих репозиториев? Я немного осмотрелся, но все, что я могу найти, - это перемещать папки внутри одного и того же репозитория и перемещать папки из репозитория в новый репозиторий.

В любом случае, это только для личных вещей, так что это не конец света, если это просто "нет" - но было бы неплохо знать, поэтому я не просто бьюсь головой о стену:)

Ответы [ 4 ]

25 голосов
/ 26 января 2009

Вы должны иметь возможность выгрузить его, а затем перезагрузить его в подкаталог нового хранилища:

свадмин дамп http://oldrepo/> mydump

svnadmin load --parent-dir my / new / folder http://newrepo/

11 голосов
/ 26 января 2009
1 голос
/ 20 февраля 2017

Поскольку принятый ответ неполон и не был исправлен, вот как вы на самом деле это делаете.

(1) Ваше исходное репо является репроектом с одним проектом, с каталогом верхнего уровня foo. Перейдите на старый сервер и создайте файл дампа:

[old-server]$ svnadmin dump /path/to/old-repo > foo.dump

(2) В вашем целевом репо уже есть два проекта с директорами верхнего уровня 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.

1 голос
/ 26 января 2009

Вы можете использовать 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...