Как перенести репозиторий SVN в другой репозиторий SVN?
есть ли простой способ скопировать каталог из одного репозитория в другой репозиторий с копированием всей истории?
9 ответов
самый простой способ-использовать:
svnadmin dump path/to/repos > repos.out
это создаст портативный формат для вашего репозитория (с историей) в файле repos.out
. Затем вы можете использовать
svnadmin load path/to/newrepos < repos.out
чтобы загрузить ваш "сброшенный" репозиторий в новый или существующий.
Глава 5. Обслуживание Репозитория - > Перенос Данных Репозитория В Другое Место имеет эту заметку об использовании svnadmin dump
в версии 1.7:
в Subversion репозиторий дамп в формате описывает версионное хранилище только изменения. Он не будет нести никакой информации о незафиксированных транзакции, пользовательские блокировки на путях файловой системы, репозитории или сервере настройки конфигурации (включая скрипты hook) и так далее.
как предложено в книги о 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
если вы не хотите историю, вы можете использовать svn export
чтобы получить чистую папку без .svn
папки, а потом svn import
в другой репозиторий.
С историей вам нужно будет использовать svnadmin dump
. Затем вы используете svndumpfilter
для фильтрации только для частей или путей, которые вы хотите использовать перед использованием svnadmin load
.
темы:
использовать svnsync
- Зеркальное Отображение Репозитория Subversion:
svnsync
- Это диверсия удаленного хранилища данных. Проще говоря, он позволяет воспроизводить ревизии одного репозитория в другой.
документация Subversion для svnsync
команда имеет следующее предупреждение (начиная с версии 1.7), подразумевающее, что после того, как некоторые другие команды SVN используются для изменения зеркального репозитория,svnsync
не должно быть используется с этим конкретным зеркалом снова:
svnsync
очень чувствителен к изменениям, внесенным в зеркальный репозиторий это не было сделано в рамках зеркальной операции. Помешать этому от того, что происходит, лучше всего, еслиsvnsync
процесс-единственный процесс разрешено изменять зеркальный репозиторий.
вы можете создать файл дампа, используя svnadmin dump
, затем импортируйте в новый репозиторий с помощью svnadmin load
.
в Subversion версии 1.7 появилась новая команда, svnrdump
который может использоваться для доступа к удаленному репозиторию и генерации того же формата дампа, что и
Я думаю, что следует заявить, что файл дампа, созданный с помощью
svnadmin dump path/to/repos > dumpfile
может быть создан (из svn 1.7 и далее) с помощью команды
svnrdump dump url_to_repos > dumpfile
это полезно, когда делается с удаленного компьютера, а не с сервера.
Если это помогает другим, есть svn2svn для воспроизведения наборов изменений из одного репозитория Subversion в другой:
чтобы перенести репозиторий с одного сервера на другую версию, выполните следующие действия.
Шаг 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
просто следуя вышеуказанным шести простым шагам, вы сможете перенести существующий репозиторий в новый репозиторий. Благодаря этому процессу вам не нужно беспокоиться о поврежденных версиях существующего репозитория.