2011-01-06 14 views
116

Tengo una estructura de directorios como esto:git ignorar todos los archivos de un tipo determinado, excepto aquellos en una subcarpeta específica

  • raíz
    • carpeta1
      • abc.json
      • def. json
      • somedir
        • more.json
    • carpeta2
      • qwe.json
      • rty.json
    • spec
      • mock1.json
      • mock2.json
      • somedir
        • more_mocks.json

Ahora, utilizando un .gitignore Quiero hacer caso omiso de todos los archivos *.json a excepción de los de la spec. No quiero utilizar un .gitignore en folder1 y folder2 porque hay un montón de estos y se agregarán a un montón, y estoy seguro de que me olvidaré de mover el archivo .gitignore correcto en su lugar.

Además, puede haber más directorios anidados con archivos json, y esta regla también debe aplicarse a todos los subdirectorios.

Entonces, ¿cómo puedo ignorar todos los archivos de un tipo, a excepción de un cierto subdirectorio?

Respuesta

184

Un prefijo opcional ! que niega el patrón ; cualquier archivo coincidente excluido por un patrón anterior se convertirá en incluido de nuevo. Si coincide un patrón negado , esto anulará las fuentes de patrones de precedencia inferiores.

http://schacon.github.com/git/gitignore.html

*.json 
!spec/*.json 
+3

También puede añadir un .gitignore a las especificaciones que contiene!/*. JSON, si lo prefiere. –

+1

¡Gracias! Aunque en mi caso, me di cuenta de que no quería ignorar nada en mi directorio de especificaciones. Así que puedo salir con un '! Spec' muy simple. Funciona de maravilla. –

+6

Mientras que la respuesta de Amber funciona cuando spec es un directorio bajo el nivel superior (es decir,/spec), no funciona para mí cuando spec es un subdirectorio, p./a/spec o a/b/spec. Usando git 1.7.5.4 –

Cuestiones relacionadas