Pregunta

Desde hace algunos años, estoy esperando que Subversion incluya una función de "eliminar permanentemente" (eliminar).Dudo en hacer la transición a Subversion (procedente de Visual SourceSafe :p), porque creo que es una característica esencial, de lo contrario esperaría que el repositorio creciera imparablemente.Sin embargo, por una razón u otra, la función se pospone una y otra vez.Entonces empiezo a preguntarme si hay alguna otra característica o solución que haga que la función de eliminación sea prescindible.

¿Qué haces cuando quieres reducir el repositorio central de SVN?

Ejemplo 1:I consultar una gran biblioteca de terceros, y después de unas semanas me doy cuenta de que no se adapta a mis necesidades.No quiero que eso almacene y haga copias de seguridad de esa gran cantidad de datos para siempre.

Ejemplo 2:Tengo 10 versiones de 10 bibliotecas grandes de terceros en el repositorio, pero solo uso las últimas versiones.

Ejemplo 3:Accidentalmente verifiqué información confidencial (como lo sugiere John).

Ejemplo 4:Accidentalmente registré algunos archivos grandes que nunca debieron colocarse en el repositorio.

¿Fue útil?

Solución

Hay una buena cantidad de discusión de svn obliterate en el billete problema en el Apache sitio de la subversión , la mayor parte de ella termina alrededor de 2008. parece que hay acuerdo general en que se trata de una buena capacidad de tener, aunque su uso debe ser raro.

Hay dos razones principales para querer a él.

En primer lugar, la comprobación de la información confidencial puede ser un problema. Dejándola allí, borrado, no es necesariamente una opción, dependiendo del nivel de confidencialidad y la exposición del repositorio.

En segundo lugar, la comprobación de una gran cantidad de cosas que no se deben comprobarse en puede aumentar drásticamente el tamaño del repositorio. El espacio en disco es barato hoy en día por lo general, pero no es ilimitado, y hay otras maneras de espacio de archivos pueden ser importantes. Si es necesario enviar un depósito a través de una conexión de red, que es el tiempo extra que pueden o no ser importante. No puede haber ventajas reales para poder grabar un CD-ROM o DVD-ROM que contiene el repositorio entero.

Por lo tanto, es una función útil que en la actualidad se lleva a cabo por el dumping, el filtrado, y volviendo a cargar el repositorio. Esta es propenso a errores de acuerdo con los informes que he visto, puede ser lento, y requiere apagar el repositorio.

Obviamente, no es una característica de alta prioridad para el equipo de Subversion, dado que lo que se necesita para un buen número de años es a alguien para hacer el trabajo para llegar a un diseño y ponerlo en práctica. Después de todo, se debe hacer muy raramente, y no hay una solución. Sin embargo, cualquier persona que quiera hacer un montón de trabajo sobre la subversión podría proporcionar un parche que (si es lo suficientemente buena calidad) probablemente se implementará.

Otros consejos

Viola el significado de control de código fuente.
control de código fuente se trata de ser capaz de restaurar un estado anterior. Si se elimina un archivo permanente que no será capaz de hacerlo.

otoh no sé VSS por lo que podría haber entendido mal "eliminar permanentemente"

La razón obvia en contra de ella se debe a que los desarrolladores piensan que será en el equilibrio que SVN peor - la felicidad que siente al ser capaz de podar material necesario por la ONU será muy eclipsada por su enojo cuando accidentalmente Obliterate algo y su / tronco vaya a faltar.

FogBugz tiene exactamente el mismo comportamiento, y en su caso se trata de diseño en su totalidad por Creo, proteger a los usuarios de sí mismos.

Obliterate viola los principios de control de versiones que te gustaría tener. O no guardaría cualquier espacio o etiquetas anteriores se convertiría roto. No sería capaz de volver a una versión anterior verdadera si se hubiera borrado todos los archivos.

En cuanto a su comentario sobre el repositorio de crecimiento ... Cualquier repositorio crecerá linealmente con el tamaño de los cambios en el tiempo. Ese es el punto central de un sistema de control de código fuente. Si no es necesario para poder realizar un seguimiento de las versiones anteriores, entonces por qué no sólo se adhieren a una carpeta compartida en alguna parte?

Subversion Obliterate, la característica olvidado , hay tres componentes a la pregunta, el problema , razón y solución: . Desde que comenzó con la pregunta a la solución, voy a empezar con eso.

Solución

Como habrá notado, no existe una gran solución. Sobre todo si se trata de un gran diccionario de la empresa, ya que la solución se vuelve más difícil cuanto más grande es el repositorio recibe. Hay una función llamada volcado / filtro a través que se puede limpiar su cesión temporal de cosas que no quieres, pero no es tan fácil de usar, no es rápido y no dependiente.

Se ha producido un pequeño esfuerzo (seguir el hilo ) en el equipo de sVN para obtener una característica obliterate allí después de 2008, pero el esfuerzo tuvo una muerte silenciosa.

El problema

El artículo que he mencionado al principio en realidad tiene una buena lista de casos de uso, donde uno puede necesitar un comando obliterate y en el 516 problema hilo los desarrolladores de hecho reconoció su mérito.

Por desgracia, parece demasiado tarde para eso; la verdadera razón por la que nunca se añadió más tarde, fue que ahora casi imposible ponerla en práctica, ya que engancha en el código en el nivel más fundamental (véase también pequeño esfuerzo enlace bajo Solution).

Desde el FAQ :

  

Las revisiones son inmutables árboles que se acumulan unos sobre otros. Extracción de una revisión de la historia podría causar un efecto dominó, creando el caos en todas las revisiones posteriores y posiblemente invalidando todas las copias de trabajo.

La razón

El problema es que en un principio la función de obliterar fue desestimada, ya que no se ajusta al principio de la verdadera control de versiones.

Una vez más desde el FAQ :

  

¿Cómo se quita por completo un archivo del historial del repositorio?    Hay casos especiales en los que es posible que desee para destruir toda evidencia de un archivo o cometer. (Quizás alguien accidentalmente un documento confidencial.) Esto no es tan fácil, porque Subversion está diseñado deliberadamente para no perder nunca la información .

Sin embargo

He trabajado con SVN para una gran cantidad de clientes ya con los equipos más grandes y proyecto más amplio y, básicamente, nunca tuvo un problema real. Si los casos de uso mencionadas orden de una función de obliterar, pero hasta el momento no estoy convencido de que este es un problema que tiene una y otra vez donde quiera que vaya. Por supuesto, la naturaleza de este problema en particular es que sólo tiene que cometer un error una vez y no se puede deshacer correctamente.

Debido a la eliminación de datos del repositorio rompe la premisa básica de control de código fuente, que es que es posible la reproducción de todos los estados anteriores y los cambios a la estructura de directorios. Si desea borrar algo de control de versiones, es probable que "haciendo mal", como se suele decir.

Yo uso varios sistemas de control de versiones durante unos 15 años y nunca tenía una función como esta.

Me pregunto cuáles son las razones que desea que la función:

  • espacio de disco? Es difícil de creer teniendo en cuenta el precio del espacio de disco
  • compromete una contraseña para el control de versiones? Así que le enseñará. Ir y cambiar la contraseña
  • velocidad del repositorio? No parece que sí, pero si consideraría un sistema completamente diferente con supuestamente mejor rendimiento.

Es posible reducir el tamaño de la de un repositorio SVN haciendo un volcado y la carga. Esencialmente, si usted dice que usted nunca quiere volver a algo más que un par de años es posible volcar el depósito, el filtro basado en el tiempo, vuelva a cargar el volcado. Querer deshacerse de un solo archivo debido a su tamaño es probablemente una indicación de que el archivo no pertenece realmente en un sistema de control de código fuente en el primer lugar.

Hay algunas secuencias de comandos que le ayuda a obliterar datos. Siga este correo lista de temas para obtener más información.

Es una forma difícil de hacerlo como la esencia de control de versiones es no perder los datos, en lugar de eliminarlo de forma permanente. Pero si usted poda una vez al año o algo así como que puede puede hacer.

El punto de control de la fuente de todo es tener una historia completa de lo que su repositorio se parece. El comando obliterate derrotas este fin de control de código fuente, y que es un misfeature en todos los sistemas de control de versiones que lo tienen.

SVN tiene copia barata y ramificación barato que no requiere una copia completa del archivo - sólo los bits modificados. Su repositorio central suele ser muy manejable en tamaño, haciendo de este misfeature innecesaria.

Obliterate no es una característica esencial de la subversión, ya que en realidad rompe los principios básicos de control de versiones (que es: para registrar toda la historia).

Y no es una característica esencial porque hay solución para hacer esto de todos modos (usando svnadmin y filtrado).

Además, la función está actualmente muy trabajado. Ver este post para más detalles.

Que yo sepa, se pretende como una característica ADMIN, y el administrador ya puede volcar / filtro / broken_workaround y eliminar el historial de todos modos. En lo que respecta a la pista de auditoría, esto no cambia la cita actual. Sería hacer que sea menos horrible, si algo absolutamente necesario eliminado.

obliterate svnadmin es una de las características más solicitadas, de la dev finalmente admitir que debería existir (por fin! Después de 8 años !!!). Y la publicidad de la misma no existente, es perseguir a los usuarios fuera de SVN.

Desafortunadamente, tuve que aprender acerca de esta "característica que falta" de la manera difícil. ¿Desde cuándo es la funcionalidad básica de una función? Los nuevos usuarios están empezando a conocer a esta y evitar SVN. En cuanto a mí, ahora uso de Git.

¿No te gusta mi opinión? Linus se refirió a los desarrolladores SVN como tarados, y todo el sistema centralizado defectuoso. Confío Linus como un verdadero experto, y en concreto lo que sabe sobre la fuente.

Lo que hago... no uso la subversión.Lo siento.

Ellos (los desarrolladores) obviamente no están de acuerdo con su evaluación de que se trata de una característica crítica.No impidió que la empresa en la que trabajo en este momento lo usara;) Personalmente descarto la subversión por esta misma razón.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top