Подтвердить что ты не робот

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

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

4b9b3361

Ответ 1

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

svnadmin dump path/to/repos > repos.out

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

svnadmin load path/to/newrepos < repos.out

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

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

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

Ответ 2

Как предложено в Книга 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

Ответ 3

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

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

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

Ответ 4

Используйте svnsync - Subversion Repository Mirroring:

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

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

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

Ответ 5

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

Ответ 6

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

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

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

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

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

Ответ 7

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

    svnadmin dump path/to/repos > dumpfile

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

   svnrdump dump url_to_repos > dumpfile

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

Ответ 8

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

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

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

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

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

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

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

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

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

$ sftp [email protected]<new_server>
Connecting to <new_server>…
Password:
sftp> mput *.dump <new_server>/dump_location

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

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

$ svnadmin create <new_repository>

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

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

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