Pregunta

Por varias razones, la fuente canónica de algunos archivos que tengo no puede ser una copia de trabajo del repositorio (el servidor de Subversion está detrás de un firewall inaccesible y los datos no existen de forma nativa en el sistema de archivos en Mi estructura preferida). Entonces, escribí una herramienta que descarga los datos, genera una estructura de directorio a partir de ellos y luego usa SharpSvn para importar el resultado al repositorio. Esto funciona & # 8230; la primera vez. La segunda vez, por supuesto, ya existe un directorio con ese nombre en el repositorio, y no puedo importar de nuevo.

En cambio, podría:

  1. Eliminar el directorio, luego importar. No he probado esto, pero aparte de sonar estúpido, probablemente también elimine el historial de revisiones de los archivos respectivos, considerando que los nuevos son completamente diferentes.
  2. Vea si el directorio existe, échele un vistazo, elimine de forma remota los archivos que ya no existen en la fuente canónica, luego reemplace el resto y confirme. Esto probablemente funcionaría, pero parece propenso a errores y es innecesariamente difícil.

¿Es correcto asumir que eliminar archivos marcará nuevos de la misma manera que los archivos diferentes ? ¿Hay una manera más fácil que el segundo enfoque?

¿Fue útil?

Solución

Para 1), no eliminará el historial de revisiones, pero los nuevos archivos serán tratados como completamente ajenos a los antiguos. Sin embargo, aún podría recuperar los archivos antiguos.

Para 2), esa sería la forma recomendada. Pero después de 'svn eliminar' los archivos existentes y agregar los nuevos, también tiene que 'svn agregar' esos nuevos archivos antes de confirmarlos.

Pero parece que debería considerar usar el script svn-load-dirs.pl. Puede leer sobre esto en el libro de Subversion, capítulo " Sucursales de proveedores " ;.

Otros consejos

Subversion tiene una conexión floja con los archivos. Para los archivos dentro de una carpeta, puede hacer / obtener / actualizar fácilmente, hacer cambios masivos (incluyendo eliminar, reemplazar o agregar archivos), y luego confirmar las diferencias. Ese comportamiento a nivel de archivo es el uso típico de Subversion.

Los directorios son ligeramente diferentes. Subversion almacena la información del repositorio en el nivel de carpeta. Entonces, si crea una nueva carpeta, no tendrá una conexión automática con Subversion. (Usando algo como TortoiseSvn, se encarga de gran parte de eso por usted).

Si va a agregar y eliminar directorios durante el proceso de generación, tendrá algunos problemas ligeramente diferentes que con los propios archivos. Pero aún puede lograr su objetivo a través de la línea de comandos, SharpSvn, TortoiseSvn u otras herramientas similares.

Como no puede sobrescribir los directorios o destruirá el directorio .svn y perderá toda la información del repositorio, debe copiar los archivos pero solo crear nuevos directorios. Así es como lo haría, desde la copia de trabajo de subversión que desea actualizar:

(cd <newdirectory> ; tar -cf - * ) | tar -xf -

De acuerdo, necesitas un sistema Unix-y. Debería funcionar con Cygwin , a menos que Windows haga algo particularmente extraño con sobrescribir carpetas a nivel del sistema.

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