excluindo um único arquivo de uma antiga revisão do subversion do repositório

4

Temos uma política bastante rígida em relação ao nosso repositório de subversão, que também é um grande inconveniente. Com nossas filiais, tudo o que é verificado no subversion precisa ter as credenciais de autenticação redigidas (por exemplo, banco de dados, contas de usuário, etc ...). Um arquivo foi adicionado e confirmado com nomes e senhas. Existem três revisões deste arquivo xml:

Primeiro - Arquivo foi adicionado e comprometido com algum conteúdo irrelevante (para esta questão). Segundo - Arquivo (entre outros 3 arquivos irrelevantes) foi cometido com credenciais de autenticação como parte de um bloco totalmente novo de XML.
Terceiro - Mais arquivos foram adicionados e registrados, nenhum sendo versões mais recentes do arquivo inválido da revisão anterior.
Quarto - Um único arquivo inválido foi verificado novamente com as credenciais de autenticação (especificamente, nada mais) removidas.

Eu gostaria de remover a segunda revisão e, sendo esta a primeira ocorrência disso, nunca tive que lidar com isso antes. Eu sei que é difícil com a subversão, já que a intenção do software é manter suas revisões de código, não escolher e fazer alterações em revisões antigas. É possível excluir um arquivo de uma revisão anterior ou substituí-lo pelo conteúdo de uma revisão mais recente (ou seja, substituir o arquivo inválido da segunda revisão pelo arquivo da quarta)?

    
por Scott 01.10.2012 / 20:34

2 respostas

3

Atualmente, não há funcionalidade obliterate no Subversion. Ele foi discutido em várias ocasiões, mas mexe com a integridade do repositório e ainda está sendo implementado .

ATENÇÃO: Esse link tem 11 anos de discussão sobre svn obliterate .

Uma alternativa é fazer o backup do repositório usando svnadmin dump ( LINK ) e restaure o repositório usando svndumpfilter ( LINK ) impedindo que revisões específicas sejam adicionadas ao repositório restaurado.

    
por 01.10.2012 / 20:40
2

Você pode fazer isso com um pouco de edição de arquivo de despejo criativo. Primeiro de tudo você precisa despejar seu repositório usando

svnadmin dump repolocation > file.dump

Você precisa abrir o arquivo file.dump em um editor de texto e encontrar a revisão que o arquivo foi adicionado. Procure por número de revisão: xxx onde xxx é a revisão que o segundo arquivo foi adicionado. Abaixo disso você encontrará um bloco como

Node-path: trunk/my/file1.txt
Node-kind: file
Node-action: change
Text-content-length: 14
Text-content-md5: c0bf20e1c2a520acddd3fccc2b9c5781
Text-content-sha1: 83162b1f0ca7b6e6816d2bc8f44550915fa2f4b7
Content-length: 14

contentsinfile

Se você remover o bloco acima, o arquivo de despejo ainda deve funcionar e será como se o segundo arquivo nunca tivesse sido adicionado ao repositório quando você carregou o arquivo de despejo em um novo repositório

No entanto, se você tiver que mostrar o arquivo (porque potencialmente ele continha algumas outras modificações, você precisa fazer o seguinte.

Onde eu estou mostrando o contentsinfile acima, você encontrará o conteúdo do segundo arquivo confirmado incluindo as senhas. Você deve editar as senhas, mas mantenha o tamanho do texto igual! Isso é para manter o tamanho do conteúdo e o comprimento do conteúdo de texto corretos! (Você também pode ajustar o comprimento, mas está procurando mais problemas) O problema agora é que as somas de verificação md5 e sha1 que você vê acima não coincidem. Você terá que gerar novos md5 e sha1 com base no conteúdo do arquivo modificado, o que pode ser bastante complicado, mas não é muito difícil!

Quando terminar a edição, você precisará carregar o arquivo de despejo modificado em um novo repositório

svnadmin create newrepo
svnadmin load newrepo < file.dump
    
por 05.10.2015 / 10:43

Tags