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.