git ignore all files except one extension and folder structure
This is simple, just add another entry !my_folder
in your .gitignore
#ignore all kind of files
*
#except php files
!*.php
!my_folder
The last line will take special care of my_folder
, and will not ignore any php files within it; but files within other folders will still be ignored because of the first pattern of *
.
EDIT
I think I misread your question. If you want to ignore all files except .php
files, you can use
#ignore all kind of files
*.*
#except php files
!*.php
This will not ignore any file which doesn't have an extension (example: if you have README
and not README.txt
), and will ignore any folder with a .
in its name (example: directory named module.1
).
FWIW, git doesn't track directories, and hence there is no way to specify ignore rules for directory vs file
This works for me (excludes all imgs folder content except .gitkeep files)
/imgs/**/*.*
!/imgs/**/.gitkeep
I had a similar problem; I wanted to whitelist *.c
, but the accepted answer didn't work for me, because I had files that didn't contain ".".
So for those who want to handle that:
# ignore everything
*
# but don't ignore files ending with slash = directories
!*/
# and don't ignore files ending with ".php"
!*.php
Note that if the !
has no effect, you probably excluded a folder. From the docs (emphasis mine):
An optional prefix "!" which negates the pattern; any matching file excluded by a previous pattern will become included again. It is not possible to re-include a file if a parent directory of that file is excluded. Git doesn’t list excluded directories for performance reasons, so any patterns on contained files have no effect, no matter where they are defined.