2010-01-09 33 views
93

No quiero que ningún directorio llamado build o dist entre en mi SVN sin importar cuán profundo sea el árbol.SVN: Ignorar algunos directorios de manera recursiva

¿Esto es posible? En git acabo de poner

build 
dist 

en mi .gitignore en la raíz y de forma recursiva ignora. ¿Cómo hago esto con svn? No me diga que haga una propset en todos los directorios padres ...

+0

Comprobar [esta respuesta] (http://stackoverflow.com/a/28425994/971090) para una solución nativa si está utilizando Subversion 1.8. –

Respuesta

41

a partir de la subversión 1.8, ahora existe la propiedad svn:global-ignores que funciona como svn:ignore pero de forma recursiva (para establecer esto en su directorio de nivel superior)

+0

me salvas la vida – MoLice

+0

Estoy un poco confundido: hay 'global-ignores' en el archivo' ~/.subversion/config', pero también la propiedad * inheritable * 'svn: global-ignores' establecida en un directorio en un repositorio SVN, así como 'svn: ignorar' - ¿puede proporcionar un resumen de estas diferentes opciones y cómo se comparan? ¿Cómo les afecta la bandera '--recursive'? – Dai

+1

He hecho mi propia investigación y publiqué mis hallazgos en esta respuesta de control de calidad: http://stackoverflow.com/a/86052/159145 – Dai

5

Para ignorar todos esos archivos en todos los repositorios, puede agregar global-ignores a su archivo de configuración por usuario.

En los sistemas Unix, esta área aparece como un directorio llamado .subversion en el directorio personal del usuario . En los sistemas Win32, Subversion crea una carpeta llamada Subversion, por lo general dentro del área Datos de programa del directorio perfil del usuario

Ver Configuration Options

Por desgracia, no hay opción por cada repositorio para hacer esto. Básicamente es por usuario o por directorio, por lo que el svn:ignores múltiple es probablemente el camino a seguir, por más molesto que pueda ser.

+1

Prefiero hacerlo por repo si puedo –

+0

Oh, entonces estás de suerte. Como dice @Kevin Reid, tienes por directorio o por usuario. –

12

añadir a su ~/.subversion/config o archivo de configuración/etc/subversion /:

[miscellany] 
global-ignores = build dist 
+0

Prefiero hacerlo por repo si puedo –

+1

hmm no estoy seguro si hay una manera fácil de hacerlo por repo, un gancho precompromiso podría rechazar ciertos patrones, pero no es una solución completa. svn: ignore en cada dir padre funciona, pero no de forma recursiva. podría cambiar su archivo de configuración con un script cuando trabaje en repositorios diferentes, pero eso es un paso adicional. – jspcal

+0

¿Qué significa ** build dist **? –

40

No es posible hacer esto. Solo hay dos mecanismos de ignorar en Subversion, svn:ignore (que no es recursivo) y global-ignores (que no es específico de un repositorio).

+7

svn propset --recursive svn: ignorar svn_ignore_rules. donde svn_ignore_rules es un archivo que contiene las reglas de ignorar, una por línea – georg

+3

'svn propset --recursive svn: ignorar --file svn_ignore_rules.' para mí con svn-1.7.6, de lo contrario estás ignorando recursivamente los archivos llamados 'svn_ignore_rules' [edit: según 'wytten' en un comentario más abajo] – elbeardmorez

+9

Para los comentaristas: Como dijo el asker, "Por favor no me digas hacer una propset en cada directorio padre ... ". –

44

svn propset toma --recursive como una opción, por lo que puede hacer esto, con dos inconvenientes:

  1. usted tiene que echa un vistazo a todo el repositorio (o por lo menos todos los directorios en la misma), y
  2. usted tiene recordar para establecer la propiedad svn:ignore siempre que se añada un nuevo directorio
0

una forma sería añadir algún tipo de comprobación para el gancho sea antes o después del compromiso, pero es sencillo nota si usted no posee El r servidor de epo

8

Es posible ignorar los directorios de generación y distribución eliminando los directorios del control de versión. El truco es usar la opción --keep-local para dejar el directorio en la copia de trabajo. Por ejemplo:

svn rm dist --keep-local 
svn ci -m'removed build directory from version control' 

El directorio ya no se realizará un seguimiento por la subversión, pero todavía estará allí en su copia de trabajo para mantener salida del compilador, etc.

aplausos, Joe

+0

¡Genial! esto es lo que funcionó para mí. – Druvision

+0

Buen truco. Simple y eficiente. – MonoThreaded

0

Desde allí parece que no hay solución para este problema probablemente común, me gustaría compartir nuestra solución.Como los otros ya dejaron en claro, puede usar la propiedad svn:ignore, esto se aplica a un único directorio (y por lo tanto no a los nuevos), o usa global-ignores que se aplica a un solo usuario (pero no pertenece al repositorio) .

Para hacer la vida un poco más fácil, creé un archivo de registro llamado Settings.Svn.reg y lo agregué a la raíz del repositorio. Ahora todo el mundo puede hacer doble clic en este archivo de registro una vez, y tiene la configuración completa.

REGEDIT4 

[HKEY_CURRENT_USER\Software\Tigris.org\Subversion\Config\miscellany] 
"global-ignores"="obj *.suo *.bak *.pdb *.user *.Cache*" 

Realmente apreciaría una solución dentro del repositorio SVN, así que si alguien sabe, ¿le importaría compartirlo?

14

Esto funciona para mí:

svn propset --recursive svn:ignore *.zip <dir_tree_with_no_zips> 
+2

Gracias por esto, funciona de maravilla ... Por cierto, la única forma que encontré para ignorar tanto * .txt como * .pdf fue poner esos patrones en un archivo y luego usar la opción 'svn propset --file' – wytten

5

Por ejemplo, la estructura de carpetas:

Project/ 
Project/dist/ 

cd Project 
svn propset svn:ignore '*' dist/ 
svn ci -m "content of dist ignored" 

Es bueno hacer un svn delete del contenido dist antes de que el comando ignore, por lo que para las ramas dist será vacío.

Trabajó para mí, probado hoy. Here is the page explaining it a bit

2

Crear un archivo y añadir sus ignora en ella

Ingore lista:

file1 
directory1 
file2 
etc... 

aplicar el comando siguiente

for n in directory; do svn propset svn:ignore -F ignore-list $n; done 

directorio es el nombre de su directorio, puede sub categorizar también directorio/subdirectorio. O use * para ver el directorio actual en el que se encuentra.

Esto es suponiendo que está utilizando bash como shell

+0

What ¿Está el ** $ n ** aquí? –

+1

@igor Ganapolsky - El $ n es la variable del bucle for. Se establecerá como el índice de la secuencia en la que está bucleando; en este caso, el directorio especificado por "directorio" en el ejemplo anterior. – jncc99

2
svn propset --recursive svn:ignore svn_ignore_rules . 

donde svn_ignore_rules es un archivo que contiene las reglas de ignorar - uno por línea

Por supuesto que tienen que volver a ejecutar cada vez se agrega un nuevo directorio para su cesión temporal

también pueden considerarse

svn_ignore_rules que se registró en el repositorio, para ser re-utilizable por otros usuarios que tengan acceso de escritura al repositorio

0
 
cd parent_dir #the directory containing folder to be ignored recursively 
svn propedit svn:ignore . #will open up svn-prop.tmp 
enlist folder(s) 
^X 
Y 
commit -m 'ignore targeted direcoty' 
4

Primero tiene que pasar a la carpeta superior de su copia de trabajo y crear allí un archivo (digamos .svnignore) donde debe colocar todos los patrones que desea ignorar, por ejemplo (para un proyecto de Android) :

bin 
gen 
proguard 
.classpath 
.project 
local.properties 
Thumbs.db 
*.apk 
*.ap_ 
*.class 
*.dex 

a continuación, se ejecuta el siguiente comando (recuerde que debe estar en la carpeta raíz de su copia de trabajo):

svn propset svn:ignore -R -F .svnignore . 

Esto sólo funcionará para las carpetas y archivos que aún no están sujetas control de versiones.Si desea que una carpeta (o archivo) que se está versionado para comenzar a ser ignorado, así, sacarlo de control de versiones mediante la ejecución del comando:

svn rm --keep-local <path> 

tengo Todo esto desde este gran artículo que lo explica todo: http://superchlorine.com/2013/08/getting-svn-to-ignore-files-and-directories/

+0

Esto fue inmensamente útil. Esta es la mejor manera que he encontrado para obtener un comportamiento de ignorancia tipo git en svn. Muchas gracias. –

2

en la subversión 1,8 sobre, es posible fijar global hace caso omiso de repositorio actual

svn propset svn:global-ignores build . 
svn propset svn:global-ignores dist . 

También puede crear una carpeta llamada .svnignore y escribir condiciones.

build 
dist 

recordar una condición por línea, establecer build/* o dist/debug es en vano. Después, realice el comando:

svn propset svn:global-ignores -F .svnignore . 
Cuestiones relacionadas