ignorar files excepto en un directory específico

Estoy creando un documento LaTeX que incluye imágenes PDF; por lo tanto, me gustaría ignorar los files PDF generados, pero no los files PDF de origen. De hecho, me las arreglé para hacer esto, pero lo primero que intenté no funcionó, y me gustaría saber por qué.

La documentation dice, en parte:

Los patrones leen desde un file .gitignore en el mismo directory que la ruta, o en cualquier directory padre, con patrones en los files de nivel superior (hasta el nivel superior del tree de trabajo) que son reemplazados por aquellos en files de nivel inferior hasta el directory conteniendo el file. Estos patrones coinciden con la location del file .gitignore. Un proyecto normalmente incluye tales files .gitignore en su repository, que contienen patrones para files generados como parte de la compilation del proyecto.

… pero parece que no puedo get los files .gitignore más .gitignore para anular los más superficiales. Aquí hay una secuencia simple de commands para reproducir lo que estoy viendo:

 ~% mkdir git-test ~% cd git-test ~/git-test% git init Initialized empty Git repository in /home/dmwit/git-test/.git/ ~/git-test% echo '*.pdf' >.gitignore ~/git-test% mkdir images ~/git-test% touch images/.gitignore ~/git-test% git add .gitignore images/.gitignore ~/git-test% git commit -m "example .gitignore files" [master (root-commit) 8c7e91d] example .gitignore files 2 files changed, 1 insertion(+) create mode 100644 .gitignore create mode 100644 images/.gitignore ~/git-test% touch images/foo.pdf ~/git-test% git status # On branch master nothing to commit, working directory clean 

¿Por qué el directory de trabajo está limpio después de esto? ¿No debería el file vacío .gitignore en git-test/images/ anular el que está en images/ , lo que hace que no se ignore nada en ese directory? (Además, por lo que vale, después de eliminar git-test/.gitignore , el nuevo pdf aparece en git status , por lo que no creo que ninguna de mis exclusiones globales lo esté afectando).

git no anula los files .gitignore completos en subdirectorys. Agrega el contenido de esos files a las reglas de ignorar actuales. En su caso particular, el file .gitignore vacío se incorpora a la list de ignorar al procesar ese subdirectory (y cualquiera de sus subdirectorys …), pero dado que no hay reglas en ese file, no es operativo. Yo sugeriría que a) trate de poner "!*.pdf" en ese file .gitignore para decirle que no ignore los files PDF, o b) deshacerse de la regla de ignorar *.pdf nivel superior, reorderar su process de compilation a ponga los files PDF producidos en un directory separado (por ejemplo, output/ ) y luego ponga un .gitignore allí con la regla "* .pdf" en él.