Global .gitignore
A global .gitignore file allows you to specify patterns for files and directories that should be ignored by Git across all repositories on your system.
A colleague of mine was erroneously placing files in their merge requests that weren’t relevant, and I took the opportunity to educate them as well as share the knowledge more broadly, even if some consider it very basic information.
macOS and .DS_Store
macOS creates a .DS_Store file inside any directory you view with Finder. This has always annoyed me about using a Mac for casual editing. If you consult man git-config, you will come across a method to ignore this across all repositories instead of modifying each one with a .gitignore.
core.excludesFile -
Specifies the pathname to the file that contains patterns to describe paths that are not meant to be tracked, in addition to .gitignore (per-directory) and .git/info/exclude. Defaults to $XDG_CONFIG_HOME/git/ignore. If $XDG_CONFIG_HOME is either not set or empty, $HOME/.config/git/ignore is used instead. See gitignore(5).
Success! This is exactly what we need.
Here is a step-by-step guide to create a global .gitignore file:
-
Create the
.configdirectory and the accompanyingignorefile. Since this is macOS, you will not have any of theXDGvariables, so we use the fallback paths instead.$ mkdir -p ~/.config/git/ $ touch ~/.config/git/ignore -
Add the patterns for the files you want to ignore, in this case the dreaded
.DS_Storefiles. You can also take this opportunity to include other things you wish to ignore globally. For example,.swpfiles come to mind if you are a heavyVimuser.Contents of
~/.config/git/ignore:# Ignore macOS system files .DS_Store -
Verify things are working by checking for the presence of a
.DS_Storein a git directory.% ls -1A .DS_Store .git .github .gitmodules .submodules .vscode COPYING Containerfile.ArchLinux Containerfile.Fedora Containerfile.UbuntuLTS Containerfile.template README.md devcontainer.json.template % git status On branch main Your branch is up to date with 'origin/main'. nothing to commit, working tree cleanNo
.gitignorefor this repository and no pending changes!
Wrapping Up
This wasn’t a particularly exciting post, but it was something that had cropped up working with a junior engineer. Sometimes it is easy to forget that I was once green too. Educating others instead of judging is the better path forward. Something about rising tides and boats comes to mind.