Como alterar o UUID da cópia de trabalho de subversão?

13

Atualizei recentemente os repositórios Subversion de uma versão 1.2.3 para 1.6.0 via svnadmin dump / load . Todos os repositórios antigos usavam o mesmo UUID (os repositórios foram criados usando copiando um repositório de modelos). Eu mudei o UUID em alguns dos novos repositórios via svnadmin setuuid para ser único. Não posso simplesmente realocar minhas cópias de trabalho existentes desses repositórios porque os UUIDs são diferentes. Eu sei sobre a exportação da cópia de trabalho e check-out do novo repositório, mas eu queria saber se havia uma maneira de mudar apenas o UUID da cópia de trabalho no local, como o que svnadmin setuuid faz para repositórios.

    
por Ioan 06.01.2011 / 21:37

5 respostas

3

Você precisa editar todos os arquivos de "entradas" no repositório solicitado. Se o repositório tiver muitos diretórios, localizar um script sed fará com que a tarefa seja curta.

    
por 10.04.2011 / 00:36
16

Nova resposta desde o formato de cópia de trabalho do Subversion 1.7 . Você precisa do utilitário de linha de comando sqlite3 .

No diretório raiz de sua cópia de trabalho, existe agora uma única pasta .svn/ com um banco de dados SQLite. Você pode consultar o repositório atual UUID conhecido por sua cópia de trabalho com:

$ sqlite3 .svn/wc.db 'select uuid from REPOSITORY where id=1'
b6dc3e6c-5320-4549-b231-c153d86d7525

Como resultado, alterar UUID pode ser feito com:

$ sqlite3 .svn/wc.db 'update REPOSITORY set uuid="1c0d1ec1-2326-0410-bef5-eb29cddfc032" where id=1'

Claro, mantenha um backup do arquivo .svn/wc.db antes de chamar a consulta de atualização. Não há quase nenhuma chance de que sua entidade de repositório tenha id diferente ou que existam várias linhas nessa tabela, mas você pode verificar se obtém resultados inesperados.

    
por 30.05.2012 / 08:31
8

Aqui está um comando que faz o truque para o SVN 1.6 e abaixo:

find . -type f -name entries -exec sed -i 's/old-uuid/new-uuid/g' {} \;

Substitua old-uuid e new-uuid pelos IDs reais.

    
por 18.06.2011 / 14:02
2

A resposta de Yves Martin funcionou muito bem para nós em várias cópias de trabalho com o SVN 1.8, mas acabamos sendo executados em casos em que não funcionou.

Rodando o comando do Yves sem "onde id = 1" funcionou em todos os casos para nós:

$ sqlite3 .svn/wc.db 'update REPOSITORY set uuid="1c0d1ec1-2326-0410-bef5-eb29cddfc032"'

Investigando por que isso aconteceu, descobri que vários UUIDs são armazenados ao realocar o repositório, ao contrário da intuição de Yves de que isso nunca deveria acontecer.

Uma nova entrada na tabela REPOSITORY é adicionada após uma realocação, em vez de atualizar a existente, armazenando um ID incrementado com a nova raiz do repositório e seu UUID. Assim, os casos que não funcionaram adequadamente foram as cópias de trabalho que já haviam sido realocadas no passado: o comando pareceria funcionar, mas somente o UUID inicial foi alterado, não o usado atualmente.

Pode-se verificar a lista de raízes armazenadas e UUIDs em uma cópia de trabalho com este comando:

$ sqlite3 .svn/wc.db 'select id,uuid,root from REPOSITORY'

Finalmente, observarei que precisei usar um conjunto diferente de citações para arquivos de linha de comando / lote do Windows, da seguinte maneira:

> sqlite3.exe .svn\wc.db "update REPOSITORY set uuid='1c0d1ec1-2326-0410-bef5-eb29cddfc032'"
    
por 21.07.2015 / 20:34
1

A seção " Gerenciando UUIDs do repositório " no svn red-bean book pode ter a resposta que você está procurando.

    
por 06.01.2011 / 21:49

Tags