Como faço para excluir 1 ficheiro a partir de uma revisão no SVN?

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

  •  09-06-2019
  •  | 
  •  

Pergunta

Um dos meus colegas de trabalho verificado em alguns arquivos no SVN e um dos arquivos tem uma senha nele.A senha foi removida do arquivo e uma nova versão do check-in, mas a senha é, obviamente, ainda no repositório, se olharmos para o histórico de revisão e ir para a revisão.(Estamos usando o TortoiseSVN como o cliente.)

Então, como faço para excluir com segurança que, em um único arquivo a partir do repositório SVN?

Outras dicas

Eu não consigo encontrar qualquer revisão da história agora - no entanto, pode ser apenas que eu não estou olhando para o lugar certo.

Você pode vê-lo olhando para a pasta de histórico, que vai dar a você a revisão onde o arquivo ainda estava lá, e, assim, você será capaz de recuperar o arquivo confidencial.Portanto, é uma má solução.

Talvez você deve alterar a sua produção senha para evitar o svn problema completamente.

Se é o última revisão (CABEÇA), você pode (FAZENDO O BACKUP seu repo de antemão) eliminar a revisão arquivos em db\revs e db\revprops e, em seguida, execute o seguinte script em python para consertar o que você revisão de recompra, pensa CABEÇA.

exemplo:se a cabeça está 522 e a senha foi comprometida, em 520, você teria que excluir revisões 520,521 e 522.

(Este script não deve ser necessária uma vez que SVN obliterar é implementado)

(Eu não escrever este script, eu tenho que partir aqui)

#!/usr/bin/python

def dec_to_36(dec):
  key = '0123456789abcdefghijklmnopqrstuvwxyz'
  result = ''
  while 1:
    div = dec / 36
    mod = dec % 36
    dec = div
    result = key[mod] + result
    if dec == 0:
      break
  return result


import os, re, sys

repo_path = sys.argv[1]
rev_path = os.path.join(repo_path, 'db', 'revs')
current_path = os.path.join(repo_path, 'db', 'current')

id_re = re.compile(r'^id:\ ([a-z0-9]+)\.([a-z0-9]+)\.r([0-9]+).*')

max_node_id = 0
max_copy_id = 0
max_rev_id = 0

for rev in os.listdir(rev_path):
  f = open(os.path.join(rev_path, rev), 'r')

  for line in f:
    m = id_re.match(line)
    if m:
      node_id = int(m.group(1), 36)
      copy_id = int(m.group(2), 36)
      rev_id = int(m.group(3), 10)

      if copy_id > max_copy_id:
        max_copy_id = copy_id

      if node_id > max_node_id:
        max_node_id = node_id

      if rev_id > max_rev_id:
        max_rev_id = rev_id

f = open(current_path, 'w+b')
f.write("%d %s %s\n" % (max_rev_id, dec_to_36(max_node_id+1),
                        dec_to_36(max_copy_id+1)))
f.close()

sua senha é ainda lá (svn cat arquivo@2342 onde 2342 é uma revisão em que o ficheiro foi ainda existe).

você pode "svnadmin dump" você acordos de recompra a um arquivo, pesquisar e substituir a palavra-passe com "ultrasecret', "svnadmin criar" uma nova acordos de recompra e "svnadmin carregar" a modificação de despejo em que os novos acordos de recompra.estar ciente de dados binários em seu despejo, então, usar um bom editor/sed.

Que parecia funcionar.Então o que eu fiz foi:

  1. Copie o ficheiro para outra pasta.
  2. Fazer uma TortoiseSVN excluir da pasta atual seguido de uma confirmação.
  3. Copiar o arquivo de volta para a pasta.
  4. Adicione o arquivo usando o TortoiseSVN e cometer novamente.

Eu não consigo encontrar qualquer revisão da história agora - no entanto, pode ser apenas que eu não estou olhando para o lugar certo.

Assim, uma modificação pergunta seria agora, como é que posso encontrar o histórico de revisão do arquivo que foi excluído e, em seguida, reenviadas para o SVN?

(BTW, eu peço desculpas para não fazer a pergunta de forma mais precisa anterior como eu nunca mencionei que uma das opções era para destruir toda a revisão da história, como isso nunca me ocorreu.)

Eu não tenho certeza.Você sempre pode criar um novo arquivo e copie a revisão mais recente em que, limpar antes de histórico de revisão.

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