¿Cómo ignoro archivos en Subversion?


¿Cómo ignoro los archivos en Subversion?

Además, ¿cómo puedo encontrar archivos que no están bajo control de versiones?

 565
Author: Peter Mortensen, 2008-09-17

17 answers

(Esta respuesta se ha actualizado para que coincida con el comportamiento de SVN 1.8 y 1.9)

Tienes 2 preguntas: {[38]]}

Marcar archivos como ignorados:

Por "archivo ignorado" quiero decir que el archivo no aparecerá en las listas incluso como "sin versionar": su cliente SVN fingirá que el archivo no existe en absoluto en el sistema de archivos.

Los archivos ignorados se especifican mediante un "patrón de archivo". La sintaxis y el formato de los patrones de archivo se explican en la documentación en línea de SVN: http://svnbook.red-bean.com/nightly/en/svn.advanced.props.special.ignore.html "Patrones de archivo en Subversion".

Subversion, a partir de la versión 1.8 (junio de 2013) y posteriores, soporta 3 formas diferentes de especificar patrones de archivo. He aquí un resumen con ejemplos:

1-Área de Configuración en tiempo de ejecución - global-ignores opción:

  • Esta es una configuración solo del lado del cliente, por lo que su lista global-ignores no será compartida por otros usuarios, y se aplica a todos los repositorios en los que realice la compra tu computadora.
  • Esta configuración se define en el archivo de área de configuración de tiempo de ejecución:
    • Windows (basado en archivos) - C:\Users\{you}\AppData\Roaming\Subversion\config
    • Windows (basado en el registro) - Software\Tigris.org\Subversion\Config\Miscellany\global-ignores tanto en HKLM como en HKCU.
    • Linux / Unix - ~/.subversion/config

2-La propiedad svn:ignore, que se establece en directorios (no en archivos):

  • Esto se almacena dentro del repositorio, por lo que otros usuarios tendrán los mismos archivos ignorados. Similar a cómo funciona .gitignore.
  • svn:ignore se aplica a directorios y no es recursivo o heredado. Se excluirá cualquier archivo o subdirectorio inmediato del directorio padre que coincida con el Patrón del archivo.
  • Mientras que SVN 1.8 agrega el concepto de "propiedades heredadas", la propiedad svn:ignore en sí se ignora en los directorios descendientes no inmediatos:

    cd ~/myRepoRoot                             # Open an existing repo.
    echo "foo" > "ignoreThis.txt"                # Create a file called "ignoreThis.txt".
    
    svn status                                  # Check to see if the file is ignored or not.
    > ?    ./ignoreThis.txt
    > 1 unversioned file                        # ...it is NOT currently ignored.
    
    svn propset svn:ignore "ignoreThis.txt" .   # Apply the svn:ignore property to the "myRepoRoot" directory.
    svn status
    > 0 unversioned files                       # ...but now the file is ignored!
    
    cd subdirectory                             # now open a subdirectory.
    echo "foo" > "ignoreThis.txt"                # create another file named "ignoreThis.txt".
    
    svn status
    > ?    ./subdirectory/ignoreThis.txt        # ...and is is NOT ignored!
    > 1 unversioned file
    

    (Por lo que el archivo ./subdirectory/ignoreThis no se ignora, a pesar de que "ignoreThis.txt" se aplica en la raíz del repositorio .).

  • Por lo tanto, para aplicar un ignore list recursivamente debe usar svn propset svn:ignore <filePattern> . --recursive.

    • Esto creará una copia de la propiedad en cada subdirectorio.
    • Si el valor <filePattern> es diferente en un directorio hijo, entonces el valor del hijo reemplaza completamente a los padres, por lo que no hay un efecto "aditivo".
    • Así que si cambia el <filePattern> en la raíz ., entonces debe cambiarlo con --recursive para sobrescribirlo en los directorios hijo y descendiente.
  • Observo que la línea de comandos la sintaxis es contra-intuitiva.

    • Empecé asumiendo que ignorarías un archivo en SVN escribiendo algo como svn ignore pathToFileToIgnore.txt sin embargo, así no es como funciona la función ignorar de SVN.

3 - La propiedad svn:global-ignores. Requiere SVN 1.8 (junio de 2013):

  • Esto es similar a svn:ignore, excepto que hace uso de la característica "propiedades heredadas" de SVN 1.8.
  • En comparación con svn:ignore, el patrón de archivo se aplica automáticamente en cada directorio descendiente (no solo niños inmediatos).
    • Esto significa que no es necesario establecer svn:global-ignores con la bandera --recursive, ya que los patrones de archivo ignorados heredados se aplican automáticamente a medida que se heredan.
  • Ejecutando el mismo conjunto de comandos que en el ejemplo anterior, pero usando svn:global-ignores en su lugar:

    cd ~/myRepoRoot                                    # Open an existing repo
    echo "foo" > "ignoreThis.txt"                       # Create a file called "ignoreThis.txt"
    svn status                                         # Check to see if the file is ignored or not
    > ?    ./ignoreThis.txt
    > 1 unversioned file                               # ...it is NOT currently ignored
    
    svn propset svn:global-ignores "ignoreThis.txt" .
    svn status
    > 0 unversioned files                              # ...but now the file is ignored!
    
    cd subdirectory                                    # now open a subdirectory
    echo "foo" > "ignoreThis.txt"                       # create another file named "ignoreThis.txt"
    svn status
    > 0 unversioned files                              # the file is ignored here too!
    

Para los usuarios de TortoiseSVN:

Todo este arreglo fue confuso para mí, porque la terminología de TortoiseSVN (como se usa en su menú del Explorador de Windows sistema) fue inicialmente engañoso para mí-no estaba seguro de cuál era el significado de las opciones "Agregar recursivamente", "Agregar *" y "Agregar" del menú Ignorar. Espero que este post explique cómo la función Ignorar se relaciona con la función SVN Properties. Dicho esto, sugiero usar la línea de comandos para establecer archivos ignorados para que tenga una idea de cómo funciona en lugar de usar la GUI, y solo usar la GUI para manipular propiedades después de que se sienta cómodo con la línea de comandos.

Listar archivos que son ignorado:

El comando svn status ocultará archivos ignorados (es decir, archivos que coincidan con un patrón RGA global-ignores, o que coincidan con el patrón svn:ignore de un directorio padre inmediato o que coincidan con el patrón svn:global-ignores de cualquier directorio ancestro.

Use la opción --no-ignore para ver esos archivos listados. Los archivos ignorados tienen un estado de I, luego canalizan la salida a grep para mostrar solo las líneas que comienzan con "I".

El comando es:

svn status --no-ignore | grep "^I"

Por ejemplo:

svn status
> ? foo                             # An unversioned file
> M modifiedFile.txt                # A versioned file that has been modified

svn status --no-ignore
> ? foo                             # An unversioned file
> I ignoreThis.txt                  # A file matching an svn:ignore pattern
> M modifiedFile.txt                # A versioned file that has been modified

svn status --no-ignore | grep "^I"
> I ignoreThis.txt                  # A file matching an svn:ignore pattern

Ta-da!

 671
Author: andyuk,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-04-13 13:40:47

Utilice el siguiente comando para crear una lista que no esté bajo archivos de control de versiones.

svn status | grep "^\?" | awk "{print \$2}" > ignoring.txt

Luego edite el archivo a deje solo los archivos que realmente desea ignorar. Luego use este para ignorar los archivos listados en el archivo:

svn propset svn:ignore -F ignoring.txt .

Observe el punto al final de la línea. Le dice a SVN que la propiedad está siendo establecida en el directorio actual.

Eliminar el archivo:

rm ignoring.txt

Finalmente commit,

svn ci --message "ignoring some files"

A continuación, puede comprobar qué archivos se ignoran via:

svn proplist -v
 73
Author: ulitosCoder,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-08-30 13:39:27

Si está utilizando TortoiseSVN, haga clic con el botón derecho en un archivo y luego seleccione TortoiseSVN / Add to ignore list. Esto añadirá el fichero / comodín a la propiedad svn:ignore.

svn:ignore se comprobará cuando esté registrando archivos, y los archivos coincidentes se ignorarán. Tengo la siguiente lista de ignorados para un proyecto de Visual Studio. NET:

bin obj
*.exe
*.dll
_ReSharper
*.pdb
*.suo

Puede encontrar esta lista en el menú contextual en TortoiseSVN / Properties.

 46
Author: artur02,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-01-28 16:56:51

Puede ignorar un archivo o directorio como .gitignore. Simplemente cree un archivo de texto de la lista de directorios / archivos que desea ignorar y ejecute el siguiente código:

svn propset svn:ignore -F ignorelist.txt .

O si no quieres usar un archivo de texto, puedes hacerlo así:

svn propset svn:ignore "first
 second
 third" .

Source: Karsten's Blog-Set svn: ignore for multiple files from command line

 35
Author: Adrian Enriquez,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-03-05 20:13:35

Encontré el artículo .ejemplo de svnignore para Java.

Ejemplo: .svnignore para Ruby on Rails,

/log

/public/*.JPEG
/public/*.jpeg
/public/*.png
/public/*.gif

*.*~

Y después de eso:

svn propset svn:ignore -F .svnignore .

Ejemplos para .gitignore. Usted puede utilizar para su .svnignore

Https://github.com/github/gitignore

 21
Author: d.danailov,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-04-15 16:23:42

Como nadie parece haberlo mencionado...

svn propedit svn:ignore .

Luego edite el contenido del archivo para especificar los patrones a ignorar, salga del editor y listo.

 11
Author: Yorick,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-07-26 21:37:07

Cuando use propedit asegúrese de no tener espacios finales, ya que eso hará que el archivo se excluya de la lista de ignorados.

Estos se insertan automáticamente si ha utilizado tab-autocompletar en linux para crear el archivo para empezar:

svn propset svn:ignore 'file1
file2' .
 10
Author: Kenneth,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-03-01 13:54:11

Otra solución es:

svn st | awk '/^?/{print $2}' > svnignore.txt && svn propget svn:ignore >> svnignore.txt && svn propset svn:ignore -F svnignore.txt . && rm svnignore.txt

O línea por línea,

svn st | awk '/^?/{print $2}' > svnignore.txt 
svn propget svn:ignore >> svnignore.txt 
svn propset svn:ignore -F svnignore.txt . 
rm svnignore.txt

Lo que hace:

  1. Obtiene los archivos de estado del svn
  2. Guarda todos los archivos con ? al archivo "svnignore.txt "
  3. Obtiene los archivos ya ignorados y los añade al archivo "svnignore.txt "
  4. Le dice al svn que ignore los archivos en "svnignore.txt "
  5. Elimina el archivo
 8
Author: bkbilly,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-12-01 02:00:34

También, si usa Tortoise SVN, puede hacer esto:

  1. En el menú contextual seleccione "TortoiseSVN", luego "Properties"
  2. En la ventana que apareció, haga clic en" Nuevo", luego en"Avanzado"
  3. En la ventana que aparece frente a "Property name" seleccione o escriba "svn: ignore", frente a" Property value "escriba el nombre de archivo deseado o el nombre de la carpeta o la máscara de archivo (en mi caso era" */target"), haga clic en"Apply property recursively"
  4. Ok. Ok.
  5. Commit
 6
Author: msangel,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-09-14 17:32:45

Una versión más legible de la respuesta de bkbilly:

svn st | awk '/^?/{print $2}' > svnignore.txt
svn propget svn:ignore >> svnignore.txt
svn propset svn:ignore -F svnignore.txt .
rm svnignore.txt

Lo que hace:

  1. Obtiene los archivos de estado del svn
  2. Guarda todos los archivos con ? al archivo "svnignore.txt "
  3. Obtiene los archivos ya ignorados y los añade al archivo "svnignore.txt "
  4. Le dice al svn que ignore los archivos en "svnignore.txt "
  5. Elimina el archivo
 5
Author: LivingDust,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-09-14 17:31:58

También puede establecer un patrón global ignore en el archivo de configuración de SVN.

 3
Author: petr k.,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-09-17 18:18:16

svn status le dirá qué archivos no están en SVN, así como qué ha cambiado.

Mire las propiedades SVN para la propiedad ignore.

Para todas las cosas SVN, el Libro Rojo es lectura obligatoria.

 3
Author: DGM,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-04-15 16:20:37

Añadiendo un directorio a subversion, e ignorando el contenido del directorio

svn propset svn:ignore '\*.*' .

O

svn propset svn:ignore '*' .
 3
Author: Al Conrad,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-03-05 20:13:00
  1. cd ~/.subversion
  2. abrir configuración
  3. encuentra la línea como'global-ignores'
  4. establezca el tipo de archivo ignore como este: global-ignores = *.o *.lo*. la*. al .libs*. so . so.[0-9] *.pyc*.pyo 88 *.rej ~ ## .#* .*.swp .DS_Store node_modules output
 3
Author: 范陆离,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-01-11 09:54:37

SVN ignore es fácil de administrar en TortoiseSVN. Abra TortoiseSVN y haga clic con el botón derecho en el menú archivo y luego seleccione Agregar a la lista de ignorados.

Esto agregará los archivos en la propiedad svn:ignore. Cuando revisamos los archivos, entonces aquellos archivos que coinciden con svn:ignore que serán ignorados y no se confirmarán.

En el proyecto de Visual Studio hemos añadido los siguientes archivos para ignorar:

bin obj
*.exe
*.dll
*.pdb
*.suo

Estamos administrando el código fuente en SVN de Comparetrap utilizando este método con éxito

 3
Author: Slack,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-01-06 11:11:56

Use el comando svn status en su copia de trabajo para mostrar el estado de los archivos, los archivos que aún no están bajo control de versiones (y no ignorados) tendrán un signo de interrogación junto a ellos.

En cuanto a ignorar archivos necesita editar la propiedad svn: ignore, lea el capítulo Ignorar Elementos No versionados en el svnbook en http://svnbook.red-bean.com/en/1.5/svn.advanced.props.special.ignore.html. El libro también describe más sobre el uso de svn status.

 2
Author: Andreas Holstenson,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-09-17 18:19:39
  1. abrir se utiliza el producto JetBrains (es decir, Pycharm)
  2. luego haga clic en el botón 'confirmar' en la barra de herramientas superior o use el acceso directo 'ctrl + k' screenshot_toolbar
  3. en la interfaz de confirmación, mueva sus archivos no deseados a otra lista de cambios de la siguiente manera. screenshot_commit_change
  4. la próxima vez solo puede confirmar la lista de cambios predeterminada.
 0
Author: G. Googol,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-06-06 06:00:35