Pregunta ¿Cómo ignoro los archivos en Subversion?


¿Cómo ignoro los archivos en Subversion?

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


552
2017-09-17 18:15


origen


Respuestas:


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

Tienes 2 preguntas:

Marcando archivos como ignorados:

Por "archivo ignorado" me refiero a que el archivo no aparecerá en las listas incluso como "no versionado": su cliente SVN pretenderá 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 archivos 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 archivos en Subversion".

Subversión, a partir de la versión 1.8 (junio de 2013) y posterior, admite 3 formas diferentes de especificar patrones de archivos. Aquí hay un resumen con ejemplos:

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

  • Esto es un solo del lado del cliente ajuste, entonces su global-ignores la lista no será compartida por otros usuarios, y se aplica a todos los repos que pague en su computadora.
  • Esta configuración se define en su 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 registro) - Software\Tigris.org\Subversion\Config\Miscellany\global-ignores en ambos HKLM y HKCU.
    • Linux / Unix - ~/.subversion/config

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

  • Esto se almacena dentro del repositorio, por lo que otros usuarios tendrán los mismos archivos de ignorar. Similar a cómo .gitignore trabajos.
  • svn:ignore se aplica a directorios y no es recursivo o heredado. Cualquier archivo o inmediato subdirectorio del directorio principal que coincide con el patrón de archivo se excluirá.
  • Mientras que SVN 1.8 agrega el concepto de "propiedades heredadas", el svn:ignore la propiedad misma se ignora en 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
    

    (Entonces el archivo ./subdirectory/ignoreThis no se ignora, aunque "ignoreThis.txt"se aplica en el . repo root).

  • Por lo tanto, para aplicar una lista de ignorar recursivamente debe usar svn propset svn:ignore <filePattern> . --recursive.

    • Esto creará una copia de la propiedad en cada subdirectorio.
    • Si el <filePattern> el valor es diferente en un directorio secundario, entonces el valor del hijo anula por completo a los padres, por lo que no hay efecto "aditivo".
    • Entonces, si cambias el <filePattern> en la raíz ., entonces debes cambiarlo con --recursive sobrescribirlo en los directorios secundarios y descendientes.
  • Observo que la sintaxis de la línea de comandos es contraria a la intuición.

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

3- El svn:global-ignores propiedad. 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.
  • Comparar con svn:ignore, el patrón de archivo se aplica automáticamente en todos los directorios descendientes (no solo en los secundarios).
    • Esto significa que no es necesario establecer svn:global-ignores con el --recursive flag, ya que los patrones heredados de ignorar archivo 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 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 usuarios de TortoiseSVN:

Todo este arreglo me resultaba confuso, porque la terminología de TortoiseSVN (como se usaba en su sistema de menús de Windows Explorer) me confundió inicialmente: no estaba seguro de la importancia de "Agregar recursivamente", "Agregar *" y "Agregar" del menú Ignorar. opciones. Espero que esta publicación explique cómo la característica Ignorar se relaciona con la característica de propiedades de SVN. Dicho esto, sugiero usar la línea de comando para establecer los archivos ignorados para que tenga una idea de cómo funciona en lugar de usar la GUI, y solo usar la GUI para manipular las propiedades una vez que se sienta cómodo con la línea de comandos.

Listado de archivos que se ignoran:

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

Utilizar el --no-ignore opción para ver esos archivos en la lista. Los archivos ignorados tienen un estado de I, luego pipe la salida a grep 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!


658
2017-09-17 18:16



Use el siguiente comando para crear una lista que no esté bajo los archivos de control de versión.

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

Luego edita el archivo para deja solo los archivos que realmente quieres ignorar. A continuación, use este para ignorar los archivos enumerados en el archivo:

svn propset svn:ignore -F ignoring.txt .

Tenga en cuenta el punto al final de la línea. Le dice a SVN que la propiedad se está configurando en el directorio actual.

Eliminar el archivo:

rm ignoring.txt

Finalmente cometer,

svn ci --message "ignoring some files"

A continuación, puede verificar qué archivos se ignoran a través de:

svn proplist -v

72
2017-10-25 15:20



Si estás usando TortoiseSVN, haga clic derecho en un archivo y luego seleccione TortoiseSVN / Agregar a la lista de ignorar. Esto agregará el archivo / comodín al svn:ignore propiedad.

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

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

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


46
2017-09-17 18:35



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 desea usar un archivo de texto, puede hacerlo así:

svn propset svn:ignore "first
 second
 third" .

Fuente: Karsten's Blog - Establecer svn: ignorar para múltiples archivos desde la línea de comando


34
2017-08-26 09:15



Encontré el artículo .svnignore Ejemplo 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. Puede usar para su .svnignore

https://github.com/github/gitignore


19
2018-03-25 20:06



Cuando utilice propedit, asegúrese de que no tenga espacios finales, ya que eso hará que el archivo se excluya de la lista de ignorar.

Estos se insertan automáticamente si usaste tab-autocomplete en Linux para crear el archivo para comenzar:

svn propset svn:ignore 'file1
file2' .

9
2018-03-01 13:54



Como nadie parece haberlo mencionado ...

svn propedit svn:ignore .

Luego edite el contenido del archivo para especificar los patrones que se ignorarán, salga del editor y todo estará listo.


9
2017-07-26 21:37



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

Que hace:

  1. Obtiene los archivos de estado del svn
  2. Guarda todos los archivos ? al archivo "svnignore.txt"
  3. Obtiene los archivos ya ignorados y los agrega al archivo "svnignore.txt"
  4. Le dice al svn que ignore los archivos en "svnignore.txt"
  5. Elimina el archivo

8
2018-05-29 11:54



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

Que hace:

  1. Obtiene los archivos de estado del svn
  2. Guarda todos los archivos ? al archivo "svnignore.txt"
  3. Obtiene los archivos ya ignorados y los agrega al archivo "svnignore.txt"
  4. Le dice al svn que ignore los archivos en "svnignore.txt"
  5. Elimina el archivo

6
2017-12-01 01:07



Además, si usa Tortoise SVN, puede hacer esto:

  1. En el menú contextual, seleccione "TortoiseSVN", luego "Propiedades"
  2. En la ventana apareció, haga clic en "Nuevo", luego "Avanzado"
  3. En la ventana aparecida opuesta a "Nombre de propiedad", seleccione o escriba "svn: ignorar", opuesto a "Valor de propiedad" escriba el nombre de archivo deseado o el nombre de la carpeta o máscara de archivo (en mi caso era "* / objetivo"), haga clic en "Aplicar propiedad recursivamente "
  4. De acuerdo. De acuerdo.
  5. Cometer

6
2018-02-28 22:56



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


3
2017-09-17 18:18