ignorar ciertos files en todas las carpetas usando un solo file .gitignore

Después de leer varias preguntas sobre .gitignore no encontré a nadie que pudiera responder mi pregunta:

¿Qué debo agregar a .gitignore para ignorar todos los files con un final determinado, digamos *.txt en todas las carpetas?

Preferiría tener solo un file .gitignore en el nivel superior.

Intenté varias cosas pero ninguna funcionó.

Esto es lo que probé ( .gitignore se agregó al repository antes, no se agregó ningún otro file):

  $ ls abc.txt content $ ls content/ abc.txt def.other def.txt $ echo "" > .gitignore $ git status --ignonetworking --untracked-files=all # On branch master # Changes not staged for commit: # (use "git add <file>..." to update what will be committed) # (use "git checkout -- <file>..." to discard changes in working directory) # # modified: .gitignore # # Untracked files: # (use "git add <file>..." to include in what will be committed) # # abc.txt # content/abc.txt # content/def.other # content/def.txt no changes added to commit (use "git add" and/or "git commit -a") 

Esto es como se esperaba: todos los files aparecen desde que .gitignore está vacío.

  $ echo "*.txt" > .gitignore $ git status --ignonetworking --untracked-files=all # On branch master # Changes not staged for commit: # (use "git add <file>..." to update what will be committed) # (use "git checkout -- <file>..." to discard changes in working directory) # # modified: .gitignore # # Untracked files: # (use "git add <file>..." to include in what will be committed) # # content/def.other # Ignonetworking files: # (use "git add -f <file>..." to include in what will be committed) # # abc.txt no changes added to commit (use "git add" and/or "git commit -a") 

¿Por qué los files content / abc.txt y content / def.txt no aparecen en la list?

  $ git clean -n Would not remove content/ 

Pensé que aparecerían aquí también.

  $ echo "" > .gitignore $ git clean -n Would remove abc.txt Would not remove content/ $ cd content $ git clean -n -x Would remove def.other $ git clean -n -x Would remove abc.txt Would remove def.other Would remove def.txt 

Si los files content / abc.txt y content / def.txt se muestran con clean -n -x pero no con clean -n , creo que se ignoran. Pero entonces, ¿por qué no se muestran en git status --ignonetworking --untracked-files=all ? git status --ignonetworking --untracked-files=all ?

Solo agregar *.txt funciona. Verifique la página man de gitignore (5) para la explicación del formatting gitignore

Si intenta agregar el directory de content , se ignorará todo el file *.txt .

 $ echo "*.txt" > .gitignore $ git add content $ git status --ignonetworking --untracked-files=all # On branch master # # Initial commit # # Changes to be committed: # (use "git rm --cached <file>..." to unstage) # # new file: content/def.other # # Untracked files: # (use "git add <file>..." to include in what will be committed) # # .gitignore # Ignonetworking files: # (use "git add -f <file>..." to include in what will be committed) # # abc.txt # content/abc.txt # content/def.txt