2008-10-15 12 views
15

Tengo un repositorio svn local en mi PC, lo he estado usando para un proyecto de pasatiempo y no estaba destinado a ser accesible para nadie, así que envié archivos con contraseñas en ellos.Borrar contenido de archivos del historial de SVN

Ahora, estoy pensando en hacer que el repositorio esté disponible para otras personas y no quiero tener esa información allí.

¿Hay alguna manera de rastrear el repositorio y reemplazar todas las contraseñas y datos de cuenta con un texto como "xxxxxxxxxx"?

Respuesta

0

Lo más fácil sería verificar los contenidos del repositorio, eliminar toda la información confidencial, importar el directorio de trabajo a un nuevo repositorio y ponerlo a disposición del público. Es muy probable que quienquiera que utilice su proyecto esté interesado en su estado actual, no en el historial de cambios.

9

Si usted hace una

svnadmin dump > mysvn 

obtendrá un archivo plano de todos los datos de todas las revisiones en el repositorio. A partir de ahí, podrá editar manualmente el archivo (si su repositorio tiene un tamaño significativo, es posible que necesite un editor de línea, como pico, nano, vi, etc.).

Por último, volvería a cargar este volcado en un nuevo repositorio. Esto preservará su historial de su proyecto.

svnadmin load /path/to/new/repo < mysvn 

Esta práctica sería considerado un no-no en cualquier entorno corporativo donde se someten a auditoría, etc, pero para un proyecto de pasatiempo que sólo puede hacer el truco para ti.

EDITAR: He tenido que hacer esto antes de intentar unir dos repositorios diferentes, por lo que era necesario agregar un nuevo "nodo de directorio" al archivo plano. No estoy seguro si SVN hashes los archivos o cambios para determinar si ha sido alterado.

+1

De hecho, comprueba las sumas de comprobación a medida que vuelve a cargar los datos. Acabo de intentar este enfoque para un problema similar. :) – Iain

+0

Esto funcionará, pero necesitará actualizar el md5sum para cualquier archivo (rutas de nodos) que se edite. En vim puede usar ctrl-v para resaltar la sección que representa el archivo, luego escriba ":! Md5sum" para obtener el nuevo hash. El archivo comienza después de la línea PROPS-END, y finaliza con dos líneas en blanco seguidas por la siguiente línea "Node-Path:". –

13
+0

Las preguntas frecuentes se han trasladado a http://subversion.apache.org/faq.html#removal – Witek

+0

Gracias, Witek. He actualizado el enlace. –

+1

¿Podría agregar el comando para ejecutar? No he entendido lo que dicen en la ayuda. ¿Qué significa 'svnadmin volcar su repositorio, luego canalizar el archivo de volcado a través de svndumpfilter (excluyendo la mala ruta) en un comando de carga svnadmin'. No hay detalles en el enlace tampoco. – Hunsu

7

Parece que hubo un malentendido. No quería borrar un archivo. Quiero eliminar contraseñas almacenadas en el repositorio. No quiero perder los archivos, ni las revisiones, modificaciones ni el historial.

Lo que hice es lo que sugirió Matt, volcar el repositorio y editarlo.

Para hacer esto, utilicé un editor hexadecimal (khexedit) y reemplacé la cadena de contraseña con una cadena de la misma longitud. De esa forma, no tengo que actualizar los campos de tamaño.

A continuación, necesito actualizar los campos md5 con el hash del contenido del archivo. Para esto, escribí un script que usaba la salida "svnadmin load" para generar un error y obtener el md5 antiguo y nuevo de ese error. A continuación, reemplace el viejo hash con sed y luego, repita hasta que no haya errores.

+2

¿podría publicar el código? – BCS

+0

'svnadmin dump repo> svn.dump', luego encuentre las versiones del archivo que necesita editar. Exporte esos archivos ('svn export file @ r1234 file.1234'). Copie los archivos exportados a file.1234.modified. Sobrescriba la contraseña con 'x' para que tengan el mismo tamaño. Obtenga nuevos md5sums y sha1 sums ('md5sum file. *; Sha1sum file. *'). Abra svn.dump en vim y busque el md5sum previo a la modificación. Sobrescriba la contraseña exactamente como en su archivo modificado, y actualice el md5sum y sha1sum. luego 'mv repo repo.bak && svnadmin load repo dannysauer

4

Tuve el mismo problema que en code.google.com: verifiqué algunos archivos que no deberían ser accesibles a través del historial en googlecode, pero no quise abandonar todo el historial, después de buscar en Google, volver a intentar y reintentando tuve éxito. Debajo de la receta que funcionó para mi pequeño proyecto (6.5 MB, 90 revisiones).La mayor parte del conocimiento provenía de googlecode, el resto en su mayoría del svn redbook

En primer lugar crear un repo local en la que descargar cesión temporal de googlecode a:

svnadmin create /tmp/your_local_repo 

crear el archivo/tmp/isd_gc/ganchos/pre-revprop- cambiar con contenidos

#!/bin/bash 
exit 0 

hacerlo ejecutable:

chmod +x /tmp/isd_gc/hooks/pre-revprop-change 

si falla en esta sección, lo más probable es que vea un error: Revprop cambio bloqueado por pre-revprop-change hook (código de salida 255) sin salida.

ahora se puede inicializar el SVN de sincronización code.google.com

svnsync init --username [email protected] file:///tmp/your_local_repo https://yourproject.googlecode.com/svn 

y empezar a descargar toda la historia:

svnsync sync --username [email protected] file:///tmp/your_local_repo 

Committed revision 1.

propiedades copiadas de revisión 1

Transmisión de datos de archivo .......................

propiedades copiadas de revisión 87.

Ahora vamos a crear un archivo de volcado que se alimenta a svndumpfilter para eliminar archivos no deseados.

svnadmin dump . > /tmp/tst_dump_gc.dmp 

utilice svndumpfilter para eliminar el primer archivo no deseado de la misma.

svndumpfilter exclude /trunk/unwanted file_1.jsvg </tmp/tst_dump_gc.dmp> /tmp/tst_dump_clean1.dmp 

Lo tira 1 nodo:

'/ trunk/file_new.jsvg no deseada'

quitar segundo archivo no deseado:

svndumpfilter exclude /trunk/unwanted file_2.jsvg </tmp/tst_dump_clean1.dmp> /tmp/tst_dump_clean2.dmp 

recrear "viejo temp repo"

rm -rf /tmp/your_local_repo 

svnadmin create /tmp/your_local_repo 

carga filtrada dum p en repo

[/tmp]$svnadmin load --ignore-uuid your_local_repo < /tmp/tst_dump_clean2.dmp 

comprobar que todo está bien en un cliente SVN (hacer una verificación de antecedentes en el tronco sólo muestra 25 primeros resultados en mi cliente SVN).

svnsync sync --username [email protected] https://yourproject.googlecode.com/svn 
Cuestiones relacionadas