Jak przenieść pojedynczy folder z jednego repozytorium Subversion do innego repozytorium?

Mam folder " docs "w repozytorium Subversion o nazwie"project". Doszedłem do wniosku, że naprawdę powinno być przechowywane w osobnym repozytorium Subversion o nazwie "project_docs".

Chciałbym przenieść folder "docs" (i wszystkie jego wersje ) do repozytorium "project_docs". Jest na to sposób?

Author: Peter Mortensen, 2009-01-06

6 answers

Jeśli masz dostęp do samego repozytorium (Nie kopii roboczej), powinieneś być w stanie zrzucić bieżące repozytorium, przefiltrować je tak, aby zawierały tylko informacje o folderze docs i załadować je do innego repozytorium.

Byłoby coś takiego:

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

Bez dostępu do repozytorium, nie możesz zachować historii wersji i musisz zadowolić się skopiowaniem plików do nowego repozytorium i zatwierdzeniem.

 179
Author: Samuel,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-07-04 13:36:23

Svndumpfilter ma poważną wadę-jeśli plik lub ścieżka zostały skopiowane ze ścieżki, którą filtrujesz do ścieżki, którą filtrujesz, svndumpfilter nie będzie w stanie wypełnić historii i zadanie się nie powiedzie.

Możesz użyć svndumpfilter2 Jeśli napotkasz ten problem.

 29
Author: compie,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-04-02 09:00:58

Jest to omówione w dokumentacji SVN. Sprawdź sekcję repozytorium Maintenance na svndumpfilter... Opisuje w szczególności, jak zrzucać projekty z centralnego repozytorium i przenosić je do nowych, oddzielnych repozytoriów.

 6
Author: Adam Bellaire,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-01-04 23:13:22

Nie wierzę, że możesz to zrobić zdalnie (tj. bez lokalnej kopii). Ale to powinno działać: svn export folder z oryginalnego serwera, a następnie {[2] } do nowego repo.

Jak:

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

Edit: d ' Oh, to rzuca historię. Użyj svnadmin jako Samuel opisuje .

 2
Author: Peter Stone,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 11:47:14

W przyszłości:

Dokumentacja SVN wyraźnie informuje:

Jeśli planujesz ręcznie edytować plik zrzutu, aby usunąć katalog najwyższego poziomu, upewnij się, że Edytor nie jest ustawiony tak, aby automatycznie konwertował Znaki końca wiersza do formatu natywnego( np. \R \n do \ n), ponieważ zawartość nie będzie zgodna z metadanymi. To uczyni plik zrzutu bezużytecznym.

Użyj sed lub Vim, aby zastąpić katalog najwyższego poziomu, ale Ta nazwa katalogu również została zawarta wewnątrz pliku projektu !!!! Powoduje to błąd sumy kontrolnej obciążenia SVN.

Więc podczas wykonywania tej operacji, nie wykonuj podstawień łańcuchowych z sed tylko nazwy ścieżki.

Zamień "Node-path: old_path "na"Node-path: new_path". Więcej szczegółów można znaleźć w rozdziale 5 Książki SVN "administracja repozytorium".

 2
Author: nios,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-12-24 23:46:13

Próbowałem użyć zaakceptowanej odpowiedzi, ale miałem ogromne repozytorium i chciałem wyeksportować mały Katalog, a nie mogłem sobie pozwolić na zrzucenie całego repozytorium.

Więc wyeksportowałem tylko wersje, w których zmienił się mój katalog (może to nie działać, jeśli katalog, który chcesz wyeksportować, ma odniesienia do innych miejsc w repo).

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

Należy zastąpić adres URL repo (URL_to_docs), lokalizację w serwerze (/svn/old_repo) i ścieżkę do dokumentów w repozytorium (path/to/docs)

Możesz łatwo edytować Twój docs_only.dump Jeśli chcesz zmienić lokalizację katalogu doc w nowym repozytorium.

 1
Author: Renato,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-11-12 13:16:32