2011-08-28 12 views
31

Tengo una copia de trabajo de un repositorio SVN completo, pero quiero convertirlo en una copia de trabajo dispersa debido a problemas de espacio en el disco.Cambiar la profundidad en la copia de trabajo SVN existente sin volver a descargar

Una forma de hacer esto sería:

svn up --set-depth immediates projects 
svn up --set-depth infinity projects/project1 
svn up --set-depth infinity projects/project2 

Sin embargo, habría que eliminar primero project1 y project2, a continuación, volver a descargar ellos. Esto es realmente inconveniente, porque son muy grandes y la velocidad de carga del servidor es muy baja. He intentado esto (con otro, más pequeño, que forma parte de la cesión temporal, como un experimento):

svn up --set-depth infinity projects/project1 
svn up --set-depth infinity projects/project2 
svn up --set-depth immediates projects 

Pero entonces el último comando simplemente se deshace la primera 2.

¿Cómo puedo ajustar la profundidad de un trabajo copiar sin que se actualice/cambie de inmediato, para que pueda tener la oportunidad de configurar correctamente los subdirectorios primero?

¿O hay otra manera de lograr lo que quiero, p. copiando primero project1 y project2 en un lugar seguro?

Respuesta

3

terminé hackearlo:

  • editar manualmente el ajuste de profundidad a "immediates" para projects *.
  • duro eliminar (no SVN eliminar) todos los niños de projects excepto project1 y project2
  • svn up projects

[*] Para ello, abre projects/.svn/entries en un editor de texto y cambiar

b125e325-6f7c-4931-9942-d1ea1ea1441a 
X 

en

b125e325-6f7c-4931-9942-d1ea1ea1441a 







immediates 
X 

Nota: Esa línea que parece UUID es probablemente diferente por repositorio, y X es realmente el valor hexadecimal 0x0C que no puedo mostrar aquí en SO.

1

Tuve el mismo problema, pero lo que escribiste no parece ser posible en SVN 1.7, ya que el formato de los metadatos es diferente.

Esto es lo que terminé haciendo (usando los directorios en su situación). Primero, copié project1 y project2 en un lugar seguro.

svn co --depth immediates svn_url/projects 

Esto comprueba hacia fuera projects con los directorios vacíos project1 y project2. Luego elimino las carpetas vacías y coloco los directorios reales en su lugar. SVN me da algunos mensajes raros, pero parece funcionar y me permite comprometerme. (No funciona con --depth empty y luego copia las carpetas, pero immediates parece funcionar.)

Estoy de acuerdo en que esta situación no es ideal, ¡pero es por eso que me estoy cambiando a Git para proyectos futuros! He usado SVN durante mucho tiempo, pero está yendo más allá de toda esperanza.

24

Woo hoo, tuve este problema, y ​​TortoiseSVN ha admitido soluciones para agregar y eliminar un elemento de la caja dispersa. http://tortoisesvn.net/docs/release/TortoiseSVN_en/tsvn-dug-checkout.html

1.To añadir: En el Explorador de Windows, haga clic derecho en la carpeta realizado el pedido, a continuación, utilizar TortoiseSVN? Repo-Browser para abrir el navegador del repositorio. Encuentre la subcarpeta que le gustaría agregar a su copia de trabajo, luego use el menú contextual? Actualizar elemento para revisión ....

2.To delete; Desde su raíz, haga clic con el botón derecho/Repo-Browser/Actualice el elemento a la revisión; luego selecciona 'Excluir'.

+9

No tiene que pasar por el navegador repo. El menú contextual de TortoiseSVN tiene la opción "Actualizar a revisión ...". Simplemente haga clic derecho en las carpetas excluidas en lugar de en la raíz del directorio de trabajo. Por supuesto, esto supone que existe una carpeta de código auxiliar (carpeta vacía excluida) en su ruta. – dobbs

0

No hay nada como revivir una vieja pregunta de SO.

He estado trabajando con un problema muy similar donde me ramifico de trunk para crear un paquete de lanzamiento pero debido a limitaciones tengo que clonar archivos que están destinados solo para dev.

asset 
└── js 
    └── some 
     └── directories 
      ├── assets 
      │   ├── files ... 
      ├── dev  **<------------ This folder needs to be empty** 
      │   ├── apis 
      │   ├── campaign 
      │   ├── features 
      │   ├── modules 
      │   ├── main.js 
      │   └── tags 
      └── release 
       ├── apis 
         ├── data 
         ├── features 
         ├── modules 
         ├── main.js 
         └── tags 

decidí que iba a excluir los archivos dev para eliminar la tentación de parchear una solución en la rama de lanzamiento en el directorio incorrecto.

Realizo una gran cantidad de cajas dispersas para evitar grandes carpetas en el maletero pero nunca lo he hecho de forma retrospectiva en una copia de trabajo. Parece que esto es bastante directo.

Para modificar la copia de trabajo de modo que asset/js/some/directories/dev esté vacío, simplemente puede ejecutar el comando svn co nuevamente en la copia de trabajo.

En mi caso las siguientes obras

svn co --depth empty ^/branches/releases/latest/asset/js/some/directories/dev \ 
asset/js/some/directories/dev 

Está ejecutando básicamente una desprotección parcial en su copia de trabajo preexistente, siendo este punto en cualquier nivel. En el caso original, simplemente ejecutaría lo siguiente.

svn co --depth immediates ^/branches/mybranch/projects projects 
svn co --depth immediates ^/branches/mybranch/project1 project1 
svn co --depth immediates ^/branches/mybranch/project2 project2 

Para aquellos que no conocen el símbolo de intercalación ^ es la abreviatura de la raíz del repositorio por lo que funciona como una ruta relativa en su repositorio un poco como ../some/location.

La clave aquí es que no está creando una nueva copia de trabajo para solucionar su problema. Está ejecutando estos comandos en su copia de trabajo existente y restablece la profundidad de sus directorios elegidos.

Cuestiones relacionadas