git - Make .gitignore ignore everything except a few files

ID : 392

viewed : 101

Tags : gitgitignoregit

Top 5 Answer for git - Make .gitignore ignore everything except a few files

vote vote


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 ! !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/* 
vote vote


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/pluto pippo/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.

vote vote


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 !  # 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,, 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:

vote vote


A little more specific:

Example: Ignore everything in webroot/cache - but keep webroot/cache/.htaccess.

Notice the slash (/) after the cache folder:


webroot/cache* !webroot/cache/.htaccess 


webroot/cache/* !webroot/cache/.htaccess 
vote vote


# ignore these * # except foo !foo 

Top 3 video Explaining git - Make .gitignore ignore everything except a few files