Как переместить одну папку из одного репозитория Subversion в другой репозиторий?
У меня есть папка" docs "в репозитории Subversion с именем"project". Я пришел к выводу, что он действительно должен храниться в отдельном репозитории Subversion с именем "project_docs".
Я хотел бы переместить папку "docs" (и все его редакции) в репозиторий "project_docs". Есть ли способ сделать это?
6 ответов:
Если у вас есть доступ к самому репозиторию (а не к рабочей копии), вы должны иметь возможность сбрасывать текущий репозиторий, фильтровать его, чтобы включать только информацию о папке 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 только имени пути.
заменить " Node-path: old_path "на"Node-path: new_path". Дополнительную информацию см. В главе 5 книги SVN "администрирование репозитория".
Я попытался использовать принятый ответ, но у меня был огромный репозиторий, и я хотел экспортировать небольшой каталог, и я не мог позволить себе сбросить весь репозиторий.
Итак, я экспортировал только версии, в которых мой каталог изменился (это может не работать, если каталог, который вы хотите экспортировать, имеет ссылки на другие места в вашем РЕПО).
svn log URL_to_docs | awk '/^r/{gsub(/^r/,"",);print }' > 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)вы можете легко изменить свой
docs_only.dumpесли вы хотите изменить расположение каталога doc в новом репозитории.
Comments