Как перенести репозиторий SVN в другой репозиторий SVN?

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


person Jakub Arnold    schedule 02.06.2009    source источник


Ответы (9)


Самый простой способ - использовать:

svnadmin dump path/to/repos > repos.out

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

svnadmin load path/to/newrepos < repos.out

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

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

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

person Adam    schedule 02.06.2009
comment
Будьте осторожны, я только что на собственном опыте узнал, что дамп svnadmin НЕ включает хуки / или conf / - person delimiter; 08.12.2011
comment
На всякий случай, если кто-то совершит ошибку, которую я допустил сегодня, вам нужно быть на машине svn, чтобы сделать это. Вы не можете проверить репо и сделать дамп из удаленной рабочей копии. stackoverflow.com/questions/8866035/, это решение для тех, кто находится в удаленном месте - person Heartinpiece; 24.12.2013
comment
svnrdump dump и svnrdump load позволят вам создать дамп и загрузить репозиторий по сети. - person Tobias Kremer; 03.02.2014
comment
Как-то безопасный способ слияния - сначала оформить заказ через черепаху и добавить + зафиксировать новую папку. Затем у меня работает svnadmin load --parent-dir newRootFolder ‹dump.out. См. Также Объединение нескольких репозиториев в один - person domih; 14.03.2014
comment
Что, если я хочу скопировать несколько папок из одного репозитория в другой? - person Gangadhar JANNU; 30.01.2015
comment
Вам также необходимо сначала создать целевой репозиторий с svnadmin create path/to/newrepos. - person Vargas; 16.05.2017
comment
Я знаю, что этому уже несколько лет, но я переношу svn с одного сервера на другой, и у меня почти 64 репозитория в /home/repos/svn, так что у каждого репо есть conf для доступа, я потеряю authz, passwd, svnserve.conf? - person Jon Weinraub; 01.03.2018
comment
А как насчет варианта svnserve pack, разве он не новее и лучше? - person Sandburg; 29.08.2018
comment
@delimiter Есть ли решение этой проблемы или текущее решение - вручную копировать папки каждый раз, когда мы делаем дамп? Похоже, это то, что можно упустить из виду, как легко ... - person JohannesB; 12.09.2018
comment
Это не самый простой способ. Самый простой способ - просто скопировать каталог репозитория как есть или с помощью инструмента svnadmin hotcopy. - person bahrep; 29.04.2020

Как предлагается в книге Subversion:

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
person Steve Schnepp    schedule 02.06.2009

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

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

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

person crashmstr    schedule 02.06.2009

Используйте команду svnsync - Subversion Repository Mirroring:

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

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

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

person Tomas Andrle    schedule 29.06.2010

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

См. svnrdump — Remote Subversion Repository Data Migration, в котором есть объяснение новой команды.

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

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

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

person Richard Chambers    schedule 10.07.2016

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

person tomoe    schedule 02.06.2009

Я думаю, следует указать, что файл дампа, созданный с помощью

    svnadmin dump path/to/repos > dumpfile

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

   svnrdump dump url_to_repos > dumpfile

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

person Efstathios Oikonomou    schedule 01.02.2017

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

Шаг 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

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

person user3767376    schedule 23.06.2014

В случае, если это поможет другим, есть svn2svn для воспроизведения ревизий из одного репозитория Subversion в другой:

https://github.com/tonyduckles/svn2svn

person user2387519    schedule 04.01.2018