tortoise - Eliminar archivo con todo el historial del repositorio svn
svn eliminar archivos del repositorio (4)
Pero esto es demasiado complicado y poco confiable.
No sabría por qué esto no debería considerarse confiable. Sin embargo, si quiere deshacerse por completo del archivo, el historial y todo, sin importar el efecto en las revisiones previas de las que este archivo era parte, solo hay una forma de hacerlo y de hecho es complicado. Y con razón. SVN es una herramienta con un único objetivo: nunca perder ningún archivo, incluso después de haber sido eliminado. Forzarlo a hacer lo contrario debería ser difícil.
¿Hay alguna manera de eliminar el archivo del repositorio svn, incluido todo su historial? Este problema surge cuando quiero deshacerme del gran archivo binario que reside en el repositorio.
Solo conozco un enfoque que podría ayudar en esta situación:
- Vuelca todo el repositorio con la ayuda de la utilidad
svnadmin
. - Filtre el archivo descargado con
grep
. Grep debería usar el nombre de archivo y escribir en el otro archivo de volcado - Importar el último archivo de volcado con
svnadmin
Pero esto es demasiado complicado y poco confiable. Tal vez hay otra solución?
Estaba enfrentando un problema similar, excepto que necesitaba eliminar varios archivos, no solo un archivo, y también estamos en Subversion 1.6, que no es compatible con la directiva --patern.
- corriente de respaldo SVN
$ cp -R /svn /svnSAVE
- depósito de volcado
$ svnadmin dump /svn/root > svnDump
- crear nuevo volcado al excluir el archivo muy grande
$ svndumpfilter exclude "/path/file.csv" < svnDump > newSvnDump0
-- {note: should see a message like this}:
-- Dropped 1 node:
-- ''/path/file.csv''
- crear otro nuevo volcado mientras se excluye otro archivo muy grande
$ svndumpfilter exclude "/path/anotherFile.csv" < newSvnDump0 > newSvnDump1
- eliminar el viejo svn
$ rm -rf /svn
- recrear los directorios svn
$ mkdir -p /svn/root
- recrear el SVN
$ svnadmin create /svn/root
- repoblar el repositorio nuevo con el volcado
$ cat newSvnDump1 | svnadmin load /svn/root
- actualizar los archivos conf de la copia guardada en la nueva copia ...
$ cp /svnSAVE/root/conf/* /svn/root/conf
Ahora el repositorio no debe contener los 2 archivos grandes "file.csv" y "anotherFile.csv"
Esto se ha convertido recientemente mucho más sencillo con el comando svndumpfilter
. Los detalles están disponibles en la documentación de subversión here . Básicamente, para evitar conflictos (explicados here ), se necesita un volcado de repositorio y se rehace cada confirmación, ya sea que incluya o excluya un prefijo de archivo dado. Sintaxis básica:
svndumpfilter exclude yourfileprefix < yourdump > yournewdump
Excluir es probablemente lo que busca la persona que pregunta, pero también puede usar incluir para, por ejemplo, extraer un subárbol del repositorio para derivarlo como su propio repositorio.
La última revisión de subversión en subversión (muy meta) también puede tomar patrones glob. Recientemente tuve que eliminar todos los pdfs de un repositorio y fue muy fácil de hacer así:
svndumpfilter exclude --pattern ''*.pdf'' < dump > dump_nopdfs
Se puede encontrar más información sobre el uso llamando a svndumpfilter help
y svndumpfilter help exclude
.
Estoy de acuerdo con la propuesta de McDowell, pero me gustaría sugerir que considere reemplazar el archivo grande con un archivo de texto que simplemente contenga el hash del archivo de la entrada eliminada.
Si tiene una gran cantidad de, por ejemplo, archivos .o que se verifican accidentalmente en un directorio de compilación, esto puede no ser apropiado. Pero si está eliminando un conjunto de artefactos binarios que no desea de un directorio que incluye un conjunto de artefactos binarios que usted quiere, tiene un alto riesgo de cometer un error costoso. Como mínimo, considere eliminarlos del tronco y de la mayoría de las ramas, pero dejando una rama de características llena de archivos de texto de marcador de posición con el hash del binario original. Esto al menos puede ser suficiente para descubrir lo que sucedió más tarde, verificar que una copia perdida que no debería haberse eliminado sea de hecho el archivo correcto y volver a ponerla bajo control de revisión.
Y, obviamente, respalda todo el repositorio hasta algo de solo lectura, como un par de M-Discos o algo así, incluso antes de pensar en hacer algo de esto.