Make .gitignore ignore everything except a few files Make .gitignore ignore everything except a few files git git

Make .gitignore ignore everything except a few files


An optional prefix ! which negates the pattern; any matching file excluded by a previous pattern will become included again. If a negated pattern matches, this will override lower precedence patterns sources.

# Ignore everything*# But not these files...!.gitignore!script.pl!template.latex# etc...# ...even if they are in subdirectories!*/# if the files to be tracked are in subdirectories!*/a/b/file1.txt!*/a/b/c/*


If you want to ignore the whole content of a directory except one file inside it, you could write a pair of rules for each directory in the file path. E.g. .gitignore to ignore the pippo folder except from pippo/pluto/paperino.xml

pippo/*!pippo/plutopippo/pluto/*!pippo/pluto/paperino.xml

Note that if you simply had written above:

pippo/*!pippo/pluto/paperino.xml

It wouldn't work because the intermediary pluto folder would not exist to Git, so paperino.xml could not find a place in which to exist.


You want to use /* instead of * or */ in most cases

Using * is valid, but it works recursively. It won't look into directories from then on out. People recommend using !*/ to whitelist directories again, but it's actually better to blacklist the highest level folder with /*

# Blacklist files/folders in same directory as the .gitignore file/*# Whitelist some files!.gitignore!README.md# Ignore all files named .DS_Store or ending with .log**/.DS_Store**.log# Whitelist folder/a/b1/ and folder/a/b2/# trailing "/" is optional for folders, may match file though.# "/" is NOT optional when followed by a *!folder/folder/*!folder/a/folder/a/*!folder/a/b1/!folder/a/b2/!folder/a/file.txt# Adding to the above, this also works...!/folder/a/deeply/folder/a/deeply/*!/folder/a/deeply/nested/folder/a/deeply/nested/*!/folder/a/deeply/nested/subfolder

The above code would ignore all files except for .gitignore, README.md, folder/a/file.txt, folder/a/b1/ and folder/a/b2/ and everything contained in those last two folders. (And .DS_Store and *.log files would be ignored in those folders.)

Obviously I could do e.g. !/folder or !/.gitignore too.

More info: http://git-scm.com/docs/gitignore