Whitelist e sottodirectory in Git

Ho creato una white-list solo per i file di testo.

* !*.txt 

Ora, ho un file di testo non tracciato in una sottodirectory – sub/dir/file.txt , e questo NON è mostrato (è ignorato). Tuttavia, vengono mostrati i file di testo nella directory principale.

Perché è così, e come lo risolvo?

Se lo provi in ​​questo modo, fallirà, perché finirai per mettere in blacklist le directory nella tua struttura.

Per risolvere, si desidera mettere in blacklist tutto ciò che non è una directory e non è uno dei tipi di file che si desidera eseguire il commit, ma non le directory di blacklisting .

Il file .gitignore che farà questo:

 # First, ignore everything * # Now, whitelist anything that's a directory !*/ # And all the file types you're interested in. !*.one !*.two !*.etc 

Testato questo in una struttura a tre livelli white-listing per i file .txt in presenza di file *.one , *.two e *.three usando un .gitignore situato nella directory root del repository – funziona per me. Non dovrai aggiungere file .gitignore a tutte le directory nella tua struttura.

Le informazioni che ho usato per capire la risposta provenivano, tra le altre cose, da (stackoverflow.com).