Como faço para mover uma única pasta a partir de um repositório Subversion para outro repositório?

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

Pergunta

Eu tenho uma pasta "docs" em um repositório Subversion chamado "projeto". Eu vim à conclusão de que ele realmente deve ser mantido sob um repositório Subversion separado denominado "project_docs".

Eu gostaria de mover a pasta "docs" ( e todas as suas revisões ) ao "project_docs" repositório. Existe uma maneira de fazer isso?

Foi útil?

Solução

Se você tem acesso o próprio repositório (não uma cópia de trabalho), você deve ser capaz de despejar o repositório atual, filtrá-la para incluir apenas informações sobre a pasta docs, e carregá-lo para o outro repositório.

Seria algo como isto:

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

Sem acesso ao repositório, você não pode manter o histórico de revisão e você tem que se contentar com a copiar os arquivos para o novo repositório e cometer.

Outras dicas

svndumpfilter tem uma falha grave - se um arquivo ou caminho foi copiado de um caminho que você está filtrando a um que você está filtrando em, svndumpfilter não será capaz de preencher a história e a tarefa falhará <. / p>

Você pode usar svndumpfilter2 se você enfrentar esse problema.

Isto é discutido na documentação do SVN. Confira a seção Repository Maintenance em svndumpfilter ... Ele descreve especificamente como despejar projetos fora de um repositório central e movê-los em novos repositórios, separados.

Eu não acredito que você pode fazê-lo remotamente (ou seja, sem uma cópia local). Mas isso deve funcionar:. svn export a pasta a partir do servidor original, em seguida, svn add-lo para o seu novo repo

Como:

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

Edit: D'oh, isso cai a história. Use svnadmin como descreve .

Para referência futura:

documentação SVN relata claramente:

Se você planeja editar manualmente o arquivo de despejo para remover um diretório de nível superior, verifique se o editor não está definido para converter automaticamente caracteres de fim de linha para o formato nativo (por exemplo, \ r \ n para \ n), como o conteúdo será então não concordar com os metadados. Isso vai tornar o arquivo de despejo inútil.

Use sed ou Vim para substituir o diretório de nível superior, mas este nome diretório foi contido também dentro de um arquivo de projeto !!!! Isso faz com que um erro de carga de checksum SVN.

Assim, quando você executar esta operação, não faça substituições de corda com sed de apenas o nome do caminho.

Substitute “Node-path: old_path” com “Node-path: new_path”. Veja SVN capítulo de livro 5 “Administração do Repositório” para mais detalhes.

Eu tentei usar a resposta aceita, mas eu tinha um enorme repositório e eu queria exportar um pequeno diretório, e eu não podia dar ao luxo de despejar todo o repositório.

Então, eu só exportado as revisões onde meu diretório mudaram (isso pode não funcionar se o diretório que deseja exportar ter referências a outros lugares em sua 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

Você deve substituir o seu URL repo (URL_to_docs), localização no servidor (/svn/old_repo) eo caminho para docs no repositório (path/to/docs)

Você pode facilmente editar o seu docs_only.dump se você quiser alterar a localização do diretório doc em seu novo repositório.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top