2009-08-18 15 views
8

I una de las versiones anteriores de mi código, almacenada en un repositorio de Subversion, hay información confidencial. ¿Cómo borrarlo manteniendo todas las otras versiones?¿Cómo borrar información sensible de Subversion?

EDITAR: El repositorio es el Hosting Proyecto de Código de Google, por lo que no puede volcar y restaurar el repositorio = (

+1

No creo que haya nada que pueda hacer usted mismo. ¿Puedes pedirle a Google que destruya el repositorio y luego reconstruirlo? –

+0

Quizás puedo hacerlo, si elijo un nombre nuevo para el proyecto. –

Respuesta

7

lo que desea es un SVN característica comúnmente llamado "borrar", que, desgraciadamente, todavía no es . implementado

Como solución, tendrá que volcar, filtrar & volver a importar su repositorio Véase por ejemplo la entrada en el FAQ SVN How do I completely remove a file from the repository's history?

por cierto:.. es una víctima :-). https://stackoverflow.com/questions/663584/subversion-permanently-remove-incorrectly-checked-in-directory-project

EDIT:

El repositorio aloja Proyecto de Código de Google, así que no puedo volcar y restaurar el repositorio = (

Por lo que yo puedo ver, la única solución en este caso es (solicite a Google que restablezca su repositorio (consulte this FAQ, y este blog post). Esto eliminará por completo todos los datos del repositorio (tanto los datos actuales como el historial), como si acabara de iniciar el repositorio usando svnadmin create.

Obviamente, primero necesitará una copia de seguridad de su repositorio.

La mejor solución probablemente es:

  • crear una copia de seguridad de tu repositorio utilizando snvsync (esto también se realizará una copia de la historia)
  • hacer el volcado/filtro/restaurar la danza (véase más arriba) en su copia de seguridad de la cesión temporal, para eliminar las problemáticas commmits
  • restablecer el repositorio de Google
  • volver a poner tu repositorio filtrada, utilizando de nuevo snvsync (ver FAQ How do I import my existing source code?)
7

No se puede quitar lo que se ha comprometido a la subversión que no sea volcar completamente, borrar el original y recrear el repositorio desde el volcado.

Si desea eliminar por completo un archivo/ruta, se puede hacer eso con la svndumpfilter:

svnadmin dump /path/to/repository > svndump 
svndumpfilter exclude path/to/sensitivefile > svndump-excluded 
svnadmin create /tmp/newrepository 
svnadmin load /tmp/newrepository < svndump-excluded 

A continuación, una copia de seguridad/ruta/al/repositorio y reemplazarlo con/tmp/newrepository después' he verificado que todo está bien.

Si sólo desea excluir una única revisión, que tendría que hacer algo como

svnadmin dump -r 0:1000 /path/to/repository > svndump1 
svnadmin dump -r 1002:HEAD --incremental /path/to/repository > svndump2 
svnadmin create /tmp/newrepository 
svnadmin load /tmp/newrepository <svndump1 
svnadmin load /tmp/newrepository <svndump2 

Es decir, se excluye la revisión 1001.No se puede hacer más fino por cierto, toda una revisión tiene que ser excluida. El mismo trato aquí, haga una copia de seguridad de su repositorio original, verifique que todo lo que se necesita en el nuevo repositorio esté allí.