Как перенести репозиторий SVN в другой репозиторий SVN? - PullRequest
58 голосов
/ 02 июня 2009

Есть ли простой способ скопировать каталог из одного хранилища в другое хранилище с копированием всей истории?

Ответы [ 9 ]

77 голосов
/ 02 июня 2009

Самый простой способ - это:

svnadmin dump path/to/repos > repos.out

Это создаст переносимый формат для вашего хранилища (с историей) в файле repos.out. Затем вы можете использовать

svnadmin load path/to/newrepos < repos.out

чтобы загрузить ваш «сброшенный» репозиторий в новый или существующий.

Глава 5. Обслуживание репозитория -> Перенос данных репозитория в других местах содержит примечание об использовании svnadmin dump начиная с версии 1.7:

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

34 голосов
/ 02 июня 2009

Как указано в Subversion book :

svnadmin dump path/to/repos_src \
    | svndumpfilter include path/inside/svn/to/directory \
    | svnadmin load path/to/repos_dst

С примером:

svnadmin dump /var/lib/svn/old_repo \
    | svndumpfilter include trunk/my_project/common_dir \
    | svnadmin load /var/lib/svn/new_repo
24 голосов
/ 02 июня 2009

Если вам не нужна история, вы можете использовать svn export, чтобы получить чистую папку без папок .svn, а затем svn import в другом хранилище.

С историей вам нужно будет использовать svnadmin dump. Затем вы должны использовать svndumpfilter для фильтрации только тех частей или путей, которые вы хотите использовать, перед использованием svnadmin load.

Темы для чтения:

9 голосов
/ 29 июня 2010

Используйте команду svnsync - Зеркальное отображение хранилища Subversion :

svnsync - это средство зеркалирования удаленного хранилища Subversion. Проще говоря, он позволяет вам преобразовывать ревизии одного репозитория в другой.

Документация Subversion для команды svnsync содержит следующее предупреждение (начиная с версии 1.7), подразумевающее, что если для модификации зеркального хранилища используются некоторые другие команды SVN, svnsync не следует снова использовать с этим конкретным зеркалом:

svnsync очень чувствителен к изменениям, сделанным в зеркальном хранилище это не было сделано как часть операции зеркалирования. Чтобы предотвратить это лучше всего, если процесс svnsync является единственным процессом разрешено изменять зеркальный репозиторий.

5 голосов
/ 10 июля 2016

В версии 1.7 Subversion есть новая команда, svnrdump, которая может использоваться для доступа к удаленному репозиторию и генерировать тот же вывод в формате дампа, что и команда svnadmin dump. Это позволяет вам использовать svnrdump с svnadmin load для передачи хранилища Subversion.

См. svnrdump - миграция данных из репозитория удаленного Subversion , в которой содержится объяснение новой команды.

В главе 5 красной книги раздел Перенос данных репозитория в другом месте имеет подраздел Перенос данных репозитория с использованием svnrdump, в котором упоминается:

Основная разница [между svnrdump и svnadmin dump] что вместо прямого доступа к хранилищу svnrdump работает удаленно, используя тот же Repository Access (RA) протоколы, которые делает клиент Subversion. Таким образом, вам может понадобиться предоставить учетные данные аутентификации. Кроме того, ваши удаленные взаимодействия [sic] подлежат ограничениям авторизации, настроенным на Сервер Subversion.

Я бы также предположил, что ограничения svnadmin dump, касающиеся настроек конфигурации сервера, таких как перехваты, могут не передаваться, будут также применяться к svnrdump.

4 голосов
/ 02 июня 2009

Вы можете создать файл дампа с помощью svnadmin dump, а затем импортировать в новый репозиторий с помощью svnadmin load.

3 голосов
/ 01 февраля 2017

Думаю, следует указать, что файл дампа создан с использованием

    svnadmin dump path/to/repos > dumpfile

может быть создано (из SVN 1.7 и далее) с помощью команды

   svnrdump dump url_to_repos > dumpfile

Это полезно, когда выполняется с удаленного компьютера, а не с сервера.

1 голос
/ 04 января 2018

Если это помогает другим, есть svn2svn для воспроизведения наборов изменений из одного хранилища Subversion в другое:

https://github.com/tonyduckles/svn2svn

0 голосов
/ 23 июня 2014

Чтобы перенести репозиторий с одного сервера на другую версию, необходимо выполнить следующие шаги:

Шаг 1. Скопируйте все версии репозитория в файл дампа. У вас могут быть тысячи версий в существующем хранилище. Таким образом, вы можете создать файл дампа, используя следующий скрипт.

dump.sh

# Here “i” is the version starting number, and “j” is the maximum version number of your existing #repository.
j=4999;
for ((i=0;i<=$j;i++));
do
   # your-unix-command-here
   echo $i
   svnadmin dump <old_server_repository_location > -r $i  –incremental > <dump_location>/$i.dump
done

В приведенном выше сценарии вы можете получить полный дамп старого хранилища в зависимости от наличия места или вы можете получить дамп за короткий промежуток времени (т. Е. От 0-5000, затем от 5001-10000 и т. Д.)

Шаг 2: Запустите приведенный выше скрипт, используя приведенную ниже команду. В зависимости от версии ядра вам необходимо выполнить любой из двух приведенных ниже запросов.

$ bash dump.sh > stdout.sh
$ ./sh dump.sh > stdout.sh

Это запишет все команды, которые вы должны были выполнить с помощью вышеуказанной команды, в файл stdout.sh. Вы можете отслеживать этот файл для дальнейшего использования.

Шаг 3. Проверьте, открыт ли брандмауэр для порта № 22 между старым и новым сервером. Если это не открыто, попросите вашего администратора сделать это доступным.

Шаг 4: Теперь скопируйте все файлы дампа, сгенерированные из старого репозитория SVN, на новый сервер с помощью следующей команды.

$ sftp xxxx@<new_server>
Connecting to <new_server>…
Password:
sftp> mput *.dump <new_server>/dump_location

В приведенной выше команде xxxx - это пользователь, который выполняет операцию. В процессе выполнения sftp вы копируете файлы дампа со старого сервера на новый.

Шаг 5: Создать новый репозиторий для нового Сервера

$ svnadmin create <new_repository>

Шаг 6: Теперь используйте приведенный ниже скрипт для загрузки всех файлов дампа.

load.sh

# Here “i” is the version starting number, and “j” is the maximum version number of your existing #repository.
j=4999;
for ((i=0;i<=$j;i++));
do
   # your-unix-command-here
   echo $i
   svnadmin load –bypass-prop-validation <new_repository> < dump_location /$i.dump
done

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

...