Git Ignoring Files
In most projects we have a set of files that we do not want to track these are usually logs or compilation or runtime files. In these cases we make use of:
.gitignore
To create a file listing to match the files we don’t want to track:
cat .gitignore
*.[oa]
*~
This tells git to ignore all files ending in .o or .a and all files that end with a tilde.
It s important to setup your .gitignore before you get going on the project so you don’t accidentally commit unnecessary files.
Gitignore Rules:
- # : are comments
 - standard glob patterns work
 - Patterns ending in forward slash (/) specify a directory
 - You can negate a pattern by starting it with an exclamation point
 
Gitignore Manual Notes
man git
Name
Gitignore: specifies intentionally untracked files to ignore.
Description
Files already tracked by git are not affected. Each gitignore file has a pattern, and have an order of precedence as follows:
- Patterns read from command line
 - Patterns read from .gitignore in the same directory path and up, with those on a higher level of the directory tree being overridden by those below.
 - Patterns read from $GIT_DIR/info/exclude
 - Patterns read from the file specified by the config variable core.excludesfile.
 
Gitignore patterns should be version controlled and distributed to other repositories in the .gitignore file. Patterns specific to a single user should go into the $GIT_DIR/info/exclude file.
Files / patterns that should be ignored in all situations should go into the core.excludesfile in ~/.gitconfig
Pattern Format
- Blank lines serve as seperators for readability
 - A line starting with # is a comment
 - ‘!’ negates the pattern
 - Pattern ending in a slash ‘/’ will match a directory and those under it. Will not match a regulat file or symbolic link.
 - If the patterns does not contain a slash ‘/’ git treats it as glob patterns
 - If the patterns does contain a slash ‘/’ it is still treated as glob patterns
 - A leading slash matches files in the root directory
 
Important Gitignore Notes
To ignore uncommited changes in a file that is already tracked:
git update-index --assume-unchanged
To stop tracking a file that is currently tracked:
git rm --cached
Taken from: Git Pro