2009-02-03 28 views
13

Esto no es, no creo, una pregunta svn estándar ignorada.Cómo evitar que SVN actualice un directorio que ya está en el repositorio

Tengo un repositorio con un enorme directorio que no quiero. Porque otros que usan el repositorio hacen, no puedo simplemente borrarlo del árbol. PERO, no quiero volver a descargar este directorio cada vez que hago un svn up. Puedo entender que ignorar evitará que los directorios que tengo se carguen a svn, pero cómo puedo decir a svn que no quiero que vuelva a descargar directorios particulares que ya están en el repositorio.

Lo que hago ...

svn up 
rm badDirectory 

y luego futura SVN de arriba Volver a descargar la misma. Quiero prevenir eso.

Gracias!

editar: OK. Esperaba que SVN tuviera una opción incorporada que aún no había notado. Esperaba evitar tener que "piratear" las insuficiencias de la subversión, pero las siguientes opciones parecen ser alternativas aceptables.

editar de nuevo para hacer frente a un par de comentarios:

¿Existe particular, razón por la que no se puede salida de esa carpeta y tener que ? no hay espacio en el disco (probablemente no desde se puede extraer) seguridad razón?

Pude ver la carpeta. El repositorio completo de svn es de aproximadamente 291 megas. 290 de él está en este directorio "malo". Básicamente, algunas otras personas que tienen control sobre el repositorio (y, por lo tanto, pueden decidir qué va allí) pusieron un directorio allí que realmente no necesitaba estar allí. No quise que esto fuera una pregunta sobre la política y las formas "correctas de & right" para usar svn. Me preguntaba si había una solución técnica.

¿Puede dar una mejor descripción de la estructura del árbol del repositorio? ¿Hay archivos en el mismo nivel que el directorio incorrecto, o solo otros directorios ? -

estructura básica:

repository root 
- good dir 1 
    - plenty of subdirs in all of these directories 
- good dir 2 
- good dir X 
- bad dir 1 
- bad dir 2 
- bad dir X 
- good file 1 
- good file 2 
- good file X 
+0

¿Hay algún motivo en particular por el que no pueda extraer esa carpeta y conservarla? no hay espacio en el disco (probablemente no, ya que puede extraerlo)? razones de seguridad ? – Max

+0

¿Puedes dar una mejor descripción de la estructura de árbol del repositorio? ¿Hay archivos en el mismo nivel que el directorio incorrecto, o solo otros directorios? –

+0

No es exactamente una respuesta a su pregunta pero, ¿puede cambiar su sistema de control de versiones? Git, por ejemplo, le permite chekout el proyecto, hacer una sucursal local para usted y eliminar la carpeta ofensiva de la misma. Las actualizaciones futuras de esa rama no tocarán lo que eliminó localmente. – Miquel

Respuesta

-2

Así que se me ocurrió lo que creo que es la respuesta más rápida a la pregunta. Desde SVN no tiene una forma de autoignore directorios que no quiero actualizando ...

Aquí está mi dir estructura existente:

raíz -> goodDir 1 -> goodDir 2 etc

He eliminado los directorios incorrectos de mi pago y envío. No puedo hacer 'svn up' desde el directorio raíz, porque intenta volver a verificar los directorios incorrectos.

embargo, el siguiente comando funciona muy bien:

ls | xargs svn up 

corto, dulce, simple y fácil de recordar.

+1

Eso no extraerá nuevos archivos en el directorio actual, ¿verdad? Si alguien agrega un nuevo archivo/carpeta al directorio de nivel superior, se lo perderá. –

+1

Además, creo que "svn up *" tiene el mismo efecto. –

+0

Si utiliza una secuencia de comandos así para comprometerse, los cambios se repartirán en varias revisiones en lugar de una. La solución que usa pagos dispersos es mejor. –

4

Se puede usar un script para svn update --non-recursiva el directorio actual, a continuación, actualizar individualmente los subdirectorios restantes recurvively. Con un script bash, puedes pasar por todos los subdirectorios y saltar por encima del que ofende.

Algo como esto:

#!/bin/bash 

BADDIR="bad" 
FILELIST="*" 

svn update --non-recursive 

for file in $FILELIST 
do 
if [ -d $file ] 
then 
    if [ $file != $BADDIR ] 
    then 
    svn update $file 
    fi 
fi 
done 
3

Si cambia el nombre del directorio .svn en el mal carpeta y luego ejecutar una actualización, SVN saltar sobre el directorio y decir que se ha eliminado a pesar de que todavía está allí.

Deberá volver a colocarlo cuando desee confirmarlo, al menos en un nivel superior que contenga el directorio incorrecto.

0

Podría especificar --non-recursivo o -N para suprimirla de conseguir todos los subdirectorios

y al hacer explícita una actualización sobre los que usted desee.

Un archivo por lotes pequeños haría más fácil repeatble

\ 0

0

Si no es una carpeta necesaria para el día a día del trabajo para usted (o su grupo) que se puede pedir al administrador para actualizar el SVN jerarquía para mover esa carpeta al mismo nivel (o superior) que las carpetas que debe actualizar.

por ejemplo

projet - non-essential folder 
     \ essential folder

y sólo tendrá que actualizar (check-out) de la carpeta "esencial" y los demás también tenga que actualizar (check-out) la carpeta "no esenciales ".

10

se puede hacer un sparse checkout:

svn co url/to/repo mywc --depth=files 

que le dará un WC con sólo los archivos en él, no en las subcarpetas. Ahora puede obtener todas las carpetas que desees

svn up url/to/repo/subfolder1 --set-depth infinity 
svn up url/to/repo/subfolder2 --set-depth infinity 
svn up url/to/repo/subfolder3 --set-depth infinity 
... 
+4

Genial, exactamente lo que quería. Además, se puede hacer desde Tortoise SVN con una "Actualización a revisión" en las carpetas no deseadas y establecer la profundidad a "solo este elemento" o "excluir". –

0

soluciones ya previstas, yo diría que la necesidad de pasar por alto una parte del repositorio de forma regular es una clara muestra de la mala estructura del repositorio. Intenta encontrar una forma de moverlo a una ubicación diferente dentro del repositorio o algo así.

0

La solución de Kirby está limpia, excepto que no actualiza el directorio actual.

Si usted tiene una estructura como esta:

root - 
    |-subdir1 
    |-subdir2 
    |-fileA 
    |-fileB 

solución de Kirby no actualizará archivoA, FILEB y cualquier otro archivo que posteriormente se agregan al directorio raíz.

Querrá agregar un "svn up -N".Usted puede hacer esto con un alias y un punto y coma: (. Esa es la sintaxis fiesta de alias Si está utilizando un shell diferente, alterar, según sea necesario)

alias myup='ls | args svn up; svn up -N' 

18

Fui con la ruta de pagar escasa similar a lo que Stefan mencionó La diferencia es que excluí todo un directorio.

Esto es lo que hice para excluir un directorio completo y todos sus subdirectorios. Nota: el directorio no deseado ya estaba en mi disco, así que lo eliminé primero.

$ rm -rf unwanted-directory
$ svn checkout url/to/repo/unwanted-directory unwanted-directory --depth empty
$ cd root/of/my/tree
$ svn update
< - indeseado-directorio no se adquiere desde el repositorio

Como referencia, tenemos un directorio 'prototipo' en nuestro árbol con un montón de código experimental. Como no trabajo en esta área, no tengo ningún interés en tener el 1G en mis múltiples árboles de desarrollo.

+1

Genial. Como referencia, para hacer lo mismo con TortoiseSVN en Windows: (1) haga clic con el botón derecho en el directorio no deseado en la copia local, seleccione TortoiseSVN> Actualizar a revisión ... (2) Establezca la profundidad de la actualización en Excluir. (3) Haga clic en Aceptar. El directorio no deseado desaparece de la copia local y no vuelve a aparecer. – texnic

0

Utilice el siguiente comando

find -maxdepth 1 ! -name . ! -name .svn ! -name badDirectory -exec svn up {} \; 

a concatenar todos los directorios antes -exec como! -name directoryName

find -maxdepth 1 ! -name . ! -name .svn ! -name badDirectory ! -name badDirectory2 ! -name badDirectory3 -exec svn up {} \; 
+0

Como mencionó Stephen Pape, incluso este método no extraerá nuevos archivos del directorio actual. Pero solo lo salva sin la necesidad de eliminar el badDirectory. – Bharathwaaj

0

Al examinar la solución específica del proveedor, en TortoiseSVN se puede lograr siguiendo los procedimientos descritos en el manual page, después de la inclusión dentro de la sección "Profundidad de obtención".

Si obtiene una copia de trabajo dispersa (es decir, por la elección de algo que no sea totalmente recursivo para la profundidad de la obtención), se puede recuperar subcarpetas adicionales más adelante mediante el navegador de repositorios (la sección llamada “El Repositorio Navegador ") o el cuadro de diálogo de verificación de modificaciones (la sección llamada" Estado Local y Remoto ").

En el explorador de Windows, haga clic con el botón derecho en la carpeta desprotegida, luego use TortoiseSVN → Repo-Browser para abrir el navegador del repositorio. Encuentra la subcarpeta que desea añadir a su copia de trabajo, a continuación, utilice Menú contextual → Actualizar ítem a la revisión ....

PERO: me gustaría añadir que me gustaría cambiar la último paso. En lugar de encontrar la subcarpeta que desea agregar (o eliminar) de la copia de trabajo, haga clic derecho en la carpeta raíz, seleccione "Actualizar elemento a revisión ...", en profundidad de trabajo haga clic en el botón "Elegir elementos" y seleccione todos los elementos secundarios en el administrador de archivos que se abre.

1

actualización de todos los datos de la ubicación actual a excepción de algunas malas directorio:

svn up `svn ls | grep -v badDirectory` 
0

veo la pregunta fue hecha hace bastante tiempo atrás, pero si usted todavía está interesado, que tropezó con un buen blog que explica las diferentes formas de el uso de "svn: ignore"

Aquí está el enlace: http://superchlorine.com/2013/08/getting-svn-to-ignore-files-and-directories/

Como se explica en el blog, que probablemente se podría crear una lista de "malos" carpetas en un archivo y usar "sVN propset svn: ignore -RF bad_folder_list_file "

Espero que ayude!

Cuestiones relacionadas