2008-08-29 12 views
8

Uno de mis compañeros de trabajo registró algunos archivos en SVN y uno de los archivos tiene una contraseña. Se ha eliminado la contraseña del archivo y se ha ingresado una nueva versión, pero la contraseña obviamente todavía está en el repositorio si miramos el historial de revisión y vamos a esa revisión. (Estamos utilizando TortoiseSVN como cliente.)¿Cómo elimino 1 archivo de una revisión en SVN?

Entonces, ¿cómo puedo eliminar de manera segura ese único archivo del repositorio en SVN?

Respuesta

-3

no estoy seguro. Siempre puede crear un nuevo archivo y copiar la última revisión en eso, borrando el historial de revisión anterior.

2

Tal vez debería cambiar su contraseña de producción para evitar el problema SVN por completo.

0

Eso parecía funcionar. Entonces lo que hice fue:

  1. Copie el archivo a otra carpeta.
  2. Hacer un TortoiseSVN eliminar de la carpeta actual seguida de una confirmación.
  3. Copie el archivo a la carpeta.
  4. Agregue el archivo usando TortoiseSVN y vuelva a confirmar.

Parece que no puedo encontrar ningún historial de revisión ahora, sin embargo, podría ser que no estoy buscando en el lugar correcto.

Entonces, una pregunta modificada sería ahora, ¿cómo puedo encontrar el historial de revisión del archivo que se eliminó y luego volver a enviar a SVN?

(Por cierto Me disculpo por no hacer la pregunta con más precisión que nunca antes como he mencionado que una de las opciones era de borrar todo el historial de revisiones, ya que no se me había ocurrido.)

+0

El procedimiento que tiene esquemas romperá los enlaces para que ver el archivo HEAD actual y su historial no le mostrará fácilmente el Sin embargo, si configura la revisión de nuevo a la versión anterior a la eliminación, podrá volver a verla. El script –

3

lo que pueda' Parece que ahora encuentro un historial de revisiones, sin embargo, podría ser que no estoy buscando en el lugar correcto.

Se puede ver mirando el historial de carpetas, que le dará la revisión en el archivo todavía estaba allí, y así podrás recuperar el archivo confidencial. Entonces es una mala solución.

2

Si es la última revisión (HEAD) puede (COPIA DE SEGURIDAD DE tu repositorio de antemano) eliminar los archivos de esa revisión en db\revs y db\revprops y luego ejecute el siguiente script en Python para arreglar lo que la revisión que Repo piensa cabeza es.

p. Ej. si head es 522 y la contraseña se confirmó en 520, deberá eliminar las revisiones 520,521 y 522.

(Este script no debería ser necesario una vez que se implementa SVN obliterate)

(no he escrito este guión, lo tengo desde here)

#!/usr/bin/python 

def dec_to_36(dec): 
    key = 'abcdefghijklmnopqrstuvwxyz' 
    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() 
+0

parece funcionar, tarda mucho tiempo en ejecutar todas las revisiones cuando ingresa a decenas de miles de Revisiones. Me pregunto qué tan seguro sería atajar y usar solo las últimas 20 revisiones. –

2

su contraseña sigue ahí (SVN cat file @ 2342 donde 2342 es una revisión, el archivo todavía estaba allí).

puede '' svnadmin volcar '', puede reposicionar a un archivo, buscar y reemplazar su contraseña con '' ultrasecret '', '' svnadmin create '' un nuevo repositorio y '' svnadmin cargar '' el volcado modificado en ese nuevo repos. Tenga en cuenta los datos binarios en su volcado, por lo tanto, utilice un editor/sed apropiado.

Cuestiones relacionadas