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

StackOverflow https://stackoverflow.com/questions/417726

Вопрос

У меня есть папка «docs» в репозитории Subversion с именем «project».Я пришел к выводу, что его действительно следует хранить в отдельном репозитории Subversion с именем «project_docs».

Я хотел бы переместить папку «Документы» (и все его редакции) в репозиторий «project_docs».Есть ли способ сделать это?

Это было полезно?

Решение

Если у вас есть доступ к самому репозиторию (а не к рабочей копии), вы сможете выгрузить текущий репозиторий, отфильтровать его так, чтобы он включал только информацию о папке docs, и загрузить его в другой репозиторий.

Было бы что-то вроде этого:

svnadmin dump /svn/old_repos > ./repository.dump
svndumpfilter include path/to/docs --drop-empty-revs --renumber-revs --preserve-revprops < ./repository.dump > ./docs_only.dump
svnadmin load /svn/new_repos < ./docs_only.dump

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

Другие советы

У svndumpfilter есть серьезный недостаток - если файл или путь были скопированы с пути, который вы фильтруете, на путь, по которому вы фильтруете, svndumpfilter не сможет заполнить историю, и задание не будет выполнено.

Вы можете использовать svndumpfilter2 , если у вас возникла эта проблема.

Это обсуждается в документации SVN. Ознакомьтесь с разделом обслуживания репозитория в svndumpfilter ... В частности, описывается, как выгружать проекты из центрального репозитория и перемещать их в новые отдельные репозитории.

Я не верю, что вы можете сделать это удаленно (т. е. без локальной копии).Но это должно работать: svn export папку с исходного сервера, затем svn add это в ваш новый репо.

Нравиться:

$ svn checkout svn://example.net/newrepo .
$ svn export svn://example.com/oldrepo/mydir ./mydir
$ svn add ./mydir; svn commit

Редактировать:Ох, это опускает историю.Использовать svnadmin как Самуэль описывает.

Для дальнейшего использования:

Документация SVN четко сообщает:

Если вы планируете вручную редактировать файл дампа для удаления каталога верхнего уровня, убедитесь, что в вашем редакторе не настроено автоматическое преобразование символов конца строки в собственный формат (например, \ r \ n в \ n), так как содержание не будет согласовываться с метаданными. Это сделает файл дампа бесполезным.

Используйте sed или Vim для замены каталога верхнего уровня, но это имя каталога также содержалось в файле проекта !!!! Это вызывает ошибку контрольной суммы загрузки SVN.

Поэтому, когда вы выполняете эту операцию, не выполняйте подстановку строк с помощью sed только с именем пути.

Заменить & # 8220; путь к узлу: old_path & # 8221; с & # 8220; Node-path: new_path & # 8221 ;. См. Главу 5 книги SVN "Администрирование хранилища" # 8221; для более подробной информации.

Я пытался использовать принятый ответ, но у меня был огромный репозиторий, и я хотел экспортировать небольшой каталог, и я не мог позволить себе сбросить весь репозиторий.

Итак, я экспортировал только те ревизии, в которых изменился мой каталог (это может не сработать, если каталог, который вы хотите экспортировать, содержит ссылки на другие места в вашем репо).

svn log URL_to_docs | awk '/^r/{gsub(/^r/,"",$1);print $1}' > revisions.txt
#tac for revisions in reverse (oldest revision first)
tac revisions.txt | while read line; do svnadmin dump /svn/old_repo -r$line >> ./docs_revisions.dump ; done

#You don't have to filter if you commited only files in your directory docs in your exported revisions
svndumpfilter include path/to/docs --drop-empty-revs --renumber-revs --preserve-revprops < ./docs_revisions.dump > ./docs_only.dump

svnadmin load /svn/new_repos < ./docs_only.dump

Вы должны заменить URL своего репо ( URL_to_docs ), местоположение на сервере ( / svn / old_repo ) и путь к документам в репозитории ( path / to / документы )

Вы можете легко отредактировать свой docs_only.dump , если вы хотите изменить местоположение своего каталога doc в своем новом хранилище.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top