question: how to ignore / exclude files / folders in a project
We don’t need Git to version everything in our projects, be it compiled source, files with passwords, or temporary files that editors love to create. Usually keeping stuff out of your VCS’ hands is a task that is hard to manage and annoying to set up. Not with Git! Using the
.gitignore file along with some other options, we’re going to learn how to set up per-project and per-user ignores.
The easiest and simplest way is to create a
.gitignore file in your project’s root directory. The files you choose to ignore here take affect for all directories in your project, unless if they include their own
.gitignore file. This is nice since you have one place to configure ignores unlike SVN’s svn:ignore which must be set on every folder. Also, the file itself can be versioned, which is definitely good.
Here’s a basic
$ cat .gitignore # Can ignore specific files .DS_Store # Use wildcards as well *~ *.swp # Can also ignore all directories and files in a directory. tmp/**/*
Of course, this could get a lot more complex. You can also add exceptions to ignore rules by starting the line with
!. See an example of this at the GitHub guide on ignores.
Two things to keep in mind with ignoring files: First, if a file is already being tracked by Git, adding the file to
.gitignore won’t stop Git from tracking it. You’ll need to do
git rm --cached <file> to keep the file in your tree and then ignore it. Secondly, empty directories do not get tracked by Git. If you want them to be tracked, they need to have something in them. Usually doing a
touch .gitignore is enough to keep the folder tracked.
You can also open up
$GIT_DIR is usually your
.gitfolder) and edit that file for project-only ignores. The problem with this is that those changes aren’t checked in, so use this only if you have some personal files that don’t need to be shared with others on the same project.
Your final option with ignoring folders is adding a per-user ignore by setting up a
core.excludesfiles option in your config file. You can set up a
.gitignore file in your HOME directory that will affect all of your repositories by running this command:
git config --global core.excludesfile ~/.gitignore
Read up on the manpage if you’d like to learn more about how ignores work. As always, if you have other ignore-related tips let us know in the comments.