Git is really good at keeping a perfect history of the changes to your files. That's a great quality to have when those files are code, but not so great when a bit of application configuration slips in.
Here are some things you probably don't want in version control:
- API keys and secret tokens for external services
- environment configuration unique to a developer's particular computer
- editor-specific files (e.g.
*.swpVim swap files)
- OS-specific files (e.g.
.DS_Storeon OS X)
It's common to add these sorts of things to the project's
but I often find I'm ignoring the same files over and over again as I start on
new projects. This is where the global
.gitignore comes in. It acts just like
.gitignore files, but it's automatically picked up by every
Do this right now:
$> touch ~/.gitignore $> git config --global core.excludesfile ~/.gitignore
No really… I'll wait.
.gitignore file in your home directory acts just like the
.gitignore files you're used to in the repositories, but it applies equally
to all your repos. I wish Git enabled this out of the box, because I think the
feature would get a lot more use if that were the case.
These are some of the entries in my global
.gitignore that you might want to
add to yours:
# Mac OS X hidden files .DS_Store # Vim swap files .*.sw? # Pow and Powder config /.pow* # RVM and rbenv /.rvmrc /.rbenv-version # Bundler binstubs /bin/
- The gitignore(5) man page has some details on the pattern format
and globbing used in
- GitHub has a nice writeup on ignoring files, which also includes a useful bit about excluding files from individual repos.
More to Come
I want to start to documenting the development practices that I find useful, in the hope that they might also be useful to you. It's something I've been thinking about for a while now, and what better time to start then the beginning of a new year? This is the first in what I hope will be a series of similar posts with the tips and tricks that have become habits for me.