2008-10-10 5 views
11

Dentro de mi proyecto de Subversion tengo algunos directorios que contienen otros proyectos de código abierto que mi código necesita. Por ejemplo ffmpeg, freetype, matrixssl y algunos otros.¿La mejor manera de reemplazar un árbol de directorios completo en Subversion?

¿Cuál es la mejor forma de actualizar SVN para que contenga la última versión de uno de estos proyectos?

Esencialmente Voy a hacer lo siguiente (utilizando ffmpeg como ejemplo):

1) Rename current ffmpeg folder to ffmpeg.old 
2) Download new version of ffmpeg from net 
3) Make sure it and my code compile and work fine together 
4) Update subversion to now hold the "new" version of ffmpeg 
5) Delete ffmpeg.old directory tree 

Respuesta

11

Puedes echar un vistazo a svnbook hablando de vendor branches. Esto es exactamente lo que intenta lograr

Puede usar svn_load_dirs.pl para reemplazar sus pasos manuales 1-5. svn_load_dirs.pl también hará un seguimiento de los archivos nuevos, movidos o eliminados.

1

todo es correcto, excepto que no es necesario los pasos 1 y 5 - Si el paso 3 no logra revertir los cambios usando svn revert funcionalidad.

+0

¿Esto manejará la eliminación de archivos que ya no se utilizan en la nueva versión o tendré que detectarlos y eliminarlos manualmente? – KPexEA

+0

use svn delete para eliminar el árbol viejo antes de descargar la última versión. Entonces no hay necesidad de resolver nada, y si el paso 3 falla, revertir. Nada se elimina realmente de SVN de todos modos. – Dandikas

+0

svn_load_dirs.pl se ocupará de los archivos eliminados – DanJ

0

Creo que tienes dos opciones.

A)

  1. SVN Borrar todos los archivos.
  2. Obtenga la actual & que funcione.
  3. SVN Agrega todos los archivos.

Pro: Asegúrese de que no se guarden archivos adicionales si no están presentes en la última versión.

Con: Puede llevar mucho tiempo.

B)

  1. Descargar e instalar la nueva versión sobre la anterior.
  2. Haz que funcione.
  3. SVN agregar nuevos archivos.

Pro: Puede ver lo que ha cambiado en los archivos de la herramienta.

Con: Puede terminar con el desorden. Dependiendo de la sobreescritura de la herramienta puede causar errores.

+0

¿Para qué se usa el paso 1 en ambos escenarios? Me parece un viejo hábito de los días en que no usaste SVN. – Dandikas

+0

solucionó eso. Me estaba yendo demasiado lejos de la pregunta – Tilendor

2

Tengo la misma situación con CMake, donde guardo la liberación win32 binarios se registró en nuestro directorio de proveedores:

branches/ 
trunk/ 
vendor/ 
    cmake/ 
     cmake-2.6.0/ 
     cmake-2.6.1/ 
     cmake-2.6.2/ 
     ... 

Luego utilizo svn: externos para referirse a la versión que estoy usando CMake . Hace que sea muy fácil probar la actualización a nuevas versiones, y también está claro qué versión de CMake estoy usando.

+0

así que, esencialmente, el proyecto svn contiene todas las versiones y usted simplemente alias a la actual? – KPexEA

+0

Sí. No tiene sentido eliminar los antiguos, ya que el directorio de proveedores nunca se revisa directamente; solo se lo utiliza usando svn: externals. – JesperE

0

Si algunos de los proyectos de proveedores también usan Subversion, puede añadir el SVN : lo externo alojamiento hasta el directorio padre de su rama/tronco.

Eche un vistazo a SVN book para más detalles.

+0

Es cierto, pero esto lo deja a merced del repositorio del proveedor. Consulte la respuesta http://stackoverflow.com/questions/192915/best-way-to-replace-a-whole-directory-tree-in-subversion/192965#192965 que describe las ramas de los proveedores, para un método más controlado. –

Cuestiones relacionadas