Carpeta de ignorar caja de SVN


98

¿Puedo ignorar una carpeta en svn checkout? Necesito ignorar la carpeta DOCs al finalizar la compra en mi servidor de compilación.

editar: Ignorar los externos no es una opción. Tengo algunos elementos externos que necesito.



¿Responde esto a tu pregunta? ¿Cómo ignoro un directorio con SVN?
Gautier

Respuestas:


104

No puede ignorar directamente las carpetas en una caja, pero puede usar cajas dispersas en svn 1.5. Por ejemplo:

$ svn co http://subversion/project/trunk my_checkout --depth immediates

Esto verificará los archivos y directorios del tronco de su proyecto en 'my_checkout', pero no recurrirá a esos directorios. P.ej:

$ cd my_checkout && ls
bar/ baz foo xyzzy/

Luego, para bajar el contenido de 'bar':

$ cd bar && svn update --set-depth infinity

Nota: hubo un error en algunas versiones 1.5 que impidió esto consvn: Shallowing of working copy depths is not yet supported
gcb

79

Sí, puedes usar SVN 1.6. Primero deberá realizar un pago, luego marcar la carpeta para su exclusión y luego eliminar la carpeta no deseada.

svn checkout http://www.example.com/project
cd project
svn update --set-depth=exclude docs
rm -fr docs

A partir de ahora, las actualizaciones de la copia de trabajo no volverán a llenar la carpeta de documentos.

Consulte http://blogs.collab.net/subversion/2009/03/sparse-directories-now-with-exclusion/ y http://subversion.apache.org/docs/release-notes/1.6.html#sparse- directorio-exclusión para más detalles.

Tom


2
Voto a favor porque me salvó de tener que pagar una carpeta enorme que no era relevante para mi trabajo.
dohpaz42

1
Eso es genial, junto con la limpieza de svn esto me ahorró 12 GiB.
JonnyJD

1
¿No sigue comprobando todo inicialmente?
Huangism

9

Con las versiones anteriores a la 1.5, he descubierto que si comprueba solo la carpeta superior y luego actualiza de forma selectiva, a partir de ese momento, las actualizaciones solo afectarán lo que ha comprobado. Es decir.

svn co -N foo
cd foo
svn up -N bar
svn up

La bandera -N hace que la operación no sea recursiva. Lo anterior no comprobará nada más a nivel foo, por ejemplo. digamos que hay una carpeta lala, el svn up final no comprobará esa carpeta, pero se actualizará bar.

Pero en un momento posterior puede svn up lalay, por lo tanto, agregarlo al pago.

Es de suponer que esto también funciona con 1.5.


6

Esto está en el cliente de TortoiseSVN 1.7.1 (también puede estar disponible en algunas versiones anteriores):

  • Pago de SVN -> Seleccionar URL del repositorio

  • Haga clic en "Elementos de pago" (en Profundidad de pago) y seleccione solo las carpetas necesarias.


4

Puede poner la carpeta de documentos en un repositorio externo y luego usar svn checkout --ignore-externals.


Esto es lo que terminamos haciendo para omitir algunos componentes prediseñados en un trabajo anterior.
Mark Bessey

2
No entiendo lo que external repositorysignifica. ¿Puedes explicarlo?
Victor

4

Sí, Subversion 1.5 tiene una función llamada Pagos dispersos que puede hacer exactamente este tipo de cosas.


2
Al leer eso, parece que los pagos dispersos solo limitan la profundidad de un pago. No pueden ignorar una carpeta en particular.
John Millikin

Claro, es posible que tenga que hacer un poco más de trabajo preliminar, como limitar la profundidad de la carpeta principal con --depth inmediates, luego verifique todas las demás carpetas excepto la que le gustaría ignorar. El punto es que las herramientas están ahí si necesita usarlas.
Greg Hewgill

Agradezco la mención de SparseCheckouts, y es interesante de seguro, pero esta respuesta no aborda la pregunta original. Claro, puedo revisar un archivo a la vez, y eso resultará en tener copias locales de archivos específicos que quiero, pero qué dolor en el trasero tener que hacer cada uno individualmente. Creo que el autor de esta pregunta está preguntando acerca de ignorar una carpeta específica, no la profundidad de las carpetas x, y permitir que la computadora haga el trabajo; el mismo trabajo que está recomendando podría realizarse manualmente.
barrypicker

Las versiones 1.6+ brindan la capacidad adicional de ignorar carpetas y un mayor control general de qué incluir / excluir en una copia de trabajo (donde la versión 1.5
FruitBreak

3

Encontré esta pregunta buscando una forma de verificar las fuentes de WebKit mientras excluía las pruebas de regresión. Terminé con lo siguiente:

svn checkout http://svn.webkit.org/repository/webkit/trunk WebKit \
  --depth immediates

cd WebKit
find . \
  -maxdepth 1 -type d \
  -not -name '.*' \
  -not -name '*Tests' \
  -not -name 'Examples' \
  -not -name 'Websites' \
  | (while read SUBDIR; do svn update --set-depth infinity "$SUBDIR"; done)

Tenga en cuenta que puede cambiar las exclusiones como mejor le parezca, pero se recomienda. * Omitir el directorio de trabajo (que ya está actualizado) y todos los directorios .svn.


¿Qué lenguaje es este?
Pup

estos son comandos de shell de Unix (también se pueden guardar y ejecutar como un archivo de script)
mrlem

2

Recientemente he resuelto la misma tarea. La idea es obtener la lista inmediata de carpetas / archivos en el repositorio, excluir las entradas que necesita, luego ver las carpetas restantes y actualizar los archivos inmediatos, si los hay. Esta es la solucion:

    # Path to the svn repository to be checked out
rpath=https://svn-repo.company.com/sw/trunk/ && \
    # This files are to be excluded (folders are ending with '/')
    # this is a regex pattern with OR ('|') between enties to be excluded
excludep='docs_folder/tests_folder/|huge_folder/|file1|file2' && \
    # Get list of the files/folders right under the repository path
filtered=`svn ls $rpath | egrep -v $excludep` && \
    # Get list of files out of filtered - they need to be 'uped'
files=`echo $filtered | sed 's| |\n|g' | egrep '^.*[^/]$'` && \
    # Get list of folders out of filtered - they need to be 'coed'
folders=`echo $filtered | sed 's| |\n|g' | egrep '^.*[/]$'` && \
    # Initial nonrecursive checkout of repository - just empty
    # to the current (./) working directory
svn co $rpath ./ --depth empty && \
    # Update the files
svn up $files &&\
    # Check out the all other folders finally.
svn co `echo $folders | sed "s|\<|$rpath|g"`

Cambie al directorio de trabajo de origen. Copie los comandos. Pegar. Cambie la URL apropiada y excluya el patrón. Ejecute el comando.

Gracias,


1
oye, ¿qué son 6 años para los desarrolladores? En su última línea tiene $ ubrpath. ¿Dónde está ese juego?
D-Klotz

1
@ D-Klotz, gracias, debería ser $ rpath en su lugar, que a su vez se establece en la ruta del repositorio. <br/> Perdón por un año de retraso
bv.

1

No, ignorar es solo para agregar archivos.
Puede usar pagos dispersos (si usa svn 1.5)


1

Como algunos otros han mencionado, puede usar svn: externals properties y luego la opción --ignore-externals cuando realice el pago. Sin embargo, una cosa a tener en cuenta es que svn: externals no necesita necesariamente referirse a otro repositorio. Puede ser una referencia a alguna otra carpeta en el mismo repositorio.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.