Join Kevin Skoglund for an in-depth discussion in this video Ignoring files globally, part of Git Essential Training.
We've seen how we can tell Git which files that auto ignore inside of our working directory, and we did that by putting a gitignore file in the root of our working directory and even storing and committing that to our repository. But what if we find ourselves ignoring the same files over and over and all of our different projects in each of our different Git repositories? Or as we saw in the last movie some of the files that we want to ignore are operating specific files, we want to ignore them all the time, because they are just generally the kind of thing that we don't want to track.
Well, to do this, we're going to configure Git to globally ignore some files. That means if we ignore those files in all repositories, not just in any one specific repository, and the settings for this global ignore are not going to be inside the repository, they're going to live outside of it, right? It's part of our git configuration, not our project configuration, but our git configuration. So what that means is it's not going to be stored in the repository. People who use our repositories, if someone downloads it and starts working with it, they're not going to get it, and so we've traded repository specific ignores for user specific ignores. They exist only on my machine. Now that's good because it means that I can configure exactly the way I like it, I can ignore the files that I want to ignore, and then we don't have to worry about what someone else wants to ignore, okay? I can just ignore my preferences.
Now that can be good, for example, if I'm working on a Mac and someone else using their repository is working on Windows, then we can each have our own gitignore files that are specific to our operating system. We don't have to share those. But on the other hand, if I've told it to ignore all log files, files ending in .log, and that's in my global config but not the project config, and then someone else starts using the repository, then they're going to always be prompted by Git to try and track the log file, that is unless they also ignore the log file.
You just want to keep in mind the difference and consider whether you want an ignored file to be listed in your user-specific ignores or your repository-specific ignores. Okay, so how to actually do the ignoring? Well, we do that using git config. We saw this back when we were setting up Git at the beginning. We do git config with the global option and then core.excludesfile, and we tell it where the file is. So the file can be named anything we want, we can locate it wherever we want, we just have to tell Git in its config file, hey, this is the file you should use for globally ignoring things. Let's try creating one.
So right now I'm inside my explore_ california directory, where I'm going to put my global ignore is in my user directory, right here. That's where my git config was before, if you remember ls -la and inside Users/kevinskoglund, you'll see that's where I've got my global gitconfig file. So I'm going to put the gitignore file right alongside it. You can create a number of different ways, you can use a Text Editor. I'm going to use the nano Text Editor that's in Mac OS X and in Unix--it's just a real simple Text Editor--and tell it that it ought to go to Users/kevinskoglund and create a file called .gitignore_global.
Now again, you can call it anything you want, so we'll be just call it gitignore. I'm going to call it gitignore_global, so it is very clear that it's a global file. So inside that file then we can put whatever things we want to ignore. Because I'm on a Mac, the things that I want to ignore most often are .DS_Store and .Trashes and .Spotlight-V100, those are just a couple of things that often pop up that need to get ignored, and there are files that the operating system is using to keep track of various things.
So I'm just going to go ahead and close that now, say yes, and let's save it to that file name that I gave it. And now if we check again la / Users/kevinskoglund, there we are. Now you can see that that file is there, and then the last thing I need to do is tell git config about that file, so git config --global core.excludesfile and then the path to the file. Let me just clear the screen, so it's clear. The short version in Unix, it just uses this Tilde that represents your user directory so you could say ~/.gitignore _global, that's what I would probably do, but you can also do it with a full path, which is what you would do on Windows, and we'll put in the full thing, kevingskoglund, that's the full path to get there.
So when we hit Return it'll add to our config file. If we take a look at that config file cat /Users/kevinskoglund/.gitconfig, we can say that it added that excludes file right here. So, now that's the file that we'll be using for global gitignores, so I'll ignore those files in every repository on my machine.
- Exploring the history of version control
- Installing Git on Mac, Windows, and Linux
- Initializing a repository
- Writing useful commit messages
- Understanding the Git three-tree architecture
- Tracking when files are added, edited, deleted, or moved
- Viewing change sets and comparing versions
- Undoing changes and rolling back to previous versions
- Ignoring changes to select files
- Creating and working with code branches
- Merging branches and resolving merge conflicts
- Stashing changes for later
- Working with hosted repositories and remote branches
- Developing an effective collaboration workflow
Skill Level Beginner
Q: In the Chapter 10 movie "Configuring the command prompt to show the branch," when I type the function "__git_ps1," I do not get the expected result.
A: The function "__git_ps1" was recently moved to a new file, .git-prompt.sh, as described here: https://github.com/git/git/commit/af31a456b4cd38f2630ed8e556e23954f806a3cc.
We will update the video. In the meantime, you may do the same steps you do for .git-completion.bash, but a second time using ".git-prompt.sh" as shown here: https://github.com/git/git/blob/master/contrib/completion/git-prompt.sh.
Q: When I use the code the instructor advises in the above video ("git config --global user.name "Nelda Street"), I still get an "Illegal Instruction" error. I have OS 10.6.8. Am I doing something wrong?
A: The current installer version of git isn't compatible with older Mac OS versions.
1. To add "-mmacosx-version-min=10.6" as described here:https://stackoverflow.com/questions/14268887/what-is-the-illegal-instruction-4-error-and-why-does-mmacosx-version-min-10https://stackoverflow.com/questions/10177038/illegal-instruction-4-shows-up-in-os-x-lion
2. Or to use the version of git that comes with Xcode, or to use homebrew to install git instead.http://superuser.com/questions/697144/installed-git-not-sure-how-to-get-it-working