git ignora todos los archivos de cierto tipo, excepto aquellos en una subcarpeta específica


192

Tengo una estructura de directorios como esta:

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

Ahora usando un .gitignoreQuiero ignorar todos los *.jsonarchivos excepto los que están en el spec. No quiero usar un .gitignorein folder1y folder2porque hay un montón de estos y se agregarán a muchos, y estoy seguro de que olvidaré mover el .gitignorearchivo 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 ignoro todos los archivos de un tipo, excepto un cierto subdirectorio?

Respuestas:


302

Un prefijo opcional !que niega el patrón; cualquier archivo coincidente excluido por un patrón anterior se volverá a incluir. Si un patrón negado coincide, esto anulará las fuentes de patrones de precedencia inferior.

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

*.json
!spec/*.json

44
También puede agregar un .gitignore a la especificación que contiene! / *. Json, si lo prefiere.
David Mitchell

2
¡Gracias! Aunque en mi caso, me di cuenta de que no quiero ignorar nada en mi directorio de especificaciones. Así que puedo salir con una muy simple !spec. Funciona de maravilla.
Alex Wayne

77
Si bien la respuesta de Amber funciona cuando spec es un directorio en el nivel superior (es decir, / spec), no funciona para mí cuando spec es un subdirectorio, por ejemplo / a / spec o a / b / spec. Usando git 1.7.5.4
Peter Lewis

77
@PeterLewis (para futuros visitantes): tal caso puede manejarse creando un archivo .gitignore en el subdirectorio correspondiente.
cmbuckley

3
Esta solución para mí solo ignoró los jsonarchivos specdirectamente, no el que está en el somedirsubdirectorio de la pregunta. Necesitaba usar !spec/**/*.jsonpara asegurarme de que también more_mocks.jsonestaba comprometido.
Leith
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.