Skip to content

Instantly share code, notes, and snippets.

@subfuzion
Last active November 6, 2024 18:57
Show Gist options
  • Save subfuzion/db7f57fff2fb6998a16c to your computer and use it in GitHub Desktop.
Save subfuzion/db7f57fff2fb6998a16c to your computer and use it in GitHub Desktop.
Global gitignore

There are certain files created by particular editors, IDEs, operating systems, etc., that do not belong in a repository. But adding system-specific files to the repo's .gitignore is considered a poor practice. This file should only exclude files and directories that are a part of the package that should not be versioned (such as the node_modules directory) as well as files that are generated (and regenerated) as artifacts of a build process.

All other files should be in your own global gitignore file:

  • Create a file called .gitignore in your home directory and add any filepath patterns you want to ignore.
  • Tell git where your global gitignore file is.

Note: The specific name and path you choose aren't important as long as you configure git to find it, as shown below. You could substitute .config/git/ignore for .gitignore in your home directory, if you prefer.

Mac

git config --global core.excludesfile ~/.gitignore

Windows

git config --global core.excludesfile "%USERPROFILE%\.gitignore"

If using Powershell (credit: @kupmanj):

git config --global core.excludesFile "$Env:USERPROFILE\.gitignore"

This will result in an entry in your .gitconfig that looks like this:

[core]
    excludesfile = {path-to-home-dir}/.gitignore

Confirm location

Particularly for Windows users, verify any filename was correctly parsed for quotes and expansion:

git config --global core.excludesFile

Isn't there already a default global ignore?

Depending on your system, and whether the XDG_CONFIG_HOME environment variable is set, there might be a default location and there might actually be a file at that location. The best practice is to ensure the file exists where you want and explicitly tell git about it using git config --global core.excludesFile.

Global .gitignore contents

Depending on your OS and tools, the following contains sample of what you might want to include. When you run git status before adding any files to your local repo, check to see if any files don't belong. Add them to your global gitignore as appropriate.

# Node
npm-debug.log

# Mac
.DS_Store

# Windows
Thumbs.db

# WebStorm
.idea/

# vi
*~

# General
log/
*.log

# etc...

Visual Studio Code

If you want search to ignore files that you've set in your local .gitignore, you must check:

  • Search: Use Ignore Files

If you want search to ignore files that you've set in your global ignore, you must also check this:

  • Search: Use Global Ignore Files

Or edit settings directly:

"search.useIgnoreFiles": true,
"search.useGlobalIgnoreFiles": true

Final notes

If you want to exclude files on a per-repo basis without modifying .gitignore, you can directly edit .git/info/exclude in the repo. Nothing under the local .git directory is committed.

I find myself often creating "scratch" code that I don't want to commit. I do this enough that I found it useful to add scratch/ to my global ignore. I've personally never worked on a project where this is an issue because a directory called scratch should not be a ignored, but if this is a concern, try using __scratch__ or something similar.

You might find useful ignore patterns for your projects here on GitHub: https://github.com/github/gitignore

@rpgdev
Copy link

rpgdev commented Apr 19, 2020

Naming this file .gitignore seems to be somewhat of a misnomer. On Linux at least, a .gitignore file and the core.excludesfile file seem to be interpreted differently by git. For example, this rule .dir/* would be completely ignored in a core.excludesfile but not in a .gitignore.

@skupjoe
Copy link

skupjoe commented Jun 24, 2020

One more thing to add,

Make sure you do this from a command prompt. Powershell will not expand the %USERPROFILE% and it will use this string literally.

@skupjoe
Copy link

skupjoe commented Jul 8, 2020

I found that using .gitgnore_global, for whatever reason, works more reliably with pattern matching. Not sure why!

git config --global core.excludesfile "%USERPROFILE%\.gitignore_global"

@rafaelkendrik
Copy link

If the file that you want to ignore already exists in the repository, you can use update-index:

$ git update-index --assume-unchanged FILENAME

@azzamsa
Copy link

azzamsa commented Jan 28, 2021

nice idea!

@keremkayhan
Copy link

great practice. thanks.

@mikeslattery
Copy link

mikeslattery commented Sep 8, 2021

IMO, a global gitignore should only contain things specific to a user's environment (OS, IDE, text editor). For example, I have .idea in mine.

It should not contain files created or used by tools used by all members of the projects that a user works on (e.g. npm, gradle). I do not think *.log, /log or npm-debug.log should be in it. If in doubt, leave it out.

@pofl
Copy link

pofl commented Feb 16, 2022

Thank you for this guide! A useful addition to this would be a link to http://gitignore.io or even directly to https://www.toptal.com/developers/gitignore/api/linux,macos,windows,intellij,visualstudiocode,git
I strongly recommend adding this to your global gitignore.

@zning1994
Copy link

zning1994 commented May 26, 2022

Thanks a lot for sharing about .gitignore_global~

@zning1994
Copy link

Thank you for this guide! A useful addition to this would be a link to http://gitignore.io or even directly to https://www.toptal.com/developers/gitignore/api/linux,macos,windows,intellij,visualstudiocode,git I strongly recommend adding this to your global gitignore.

That's great! Thanks for sharing!

@MooreTattz
Copy link

@skupjoe
Copy link

skupjoe commented Aug 17, 2022

Good tip on the global gitignore file- that was bothering me for ages!

@mikeslattery
Copy link

@falconer94
Copy link

I had the global gitignore setup, but each individual repo was tracking on all the unwanted files (the .DS_Store file on macos). Found this helpful:
https://stackoverflow.com/questions/1274057/how-do-i-make-git-forget-about-a-file-that-was-tracked-but-is-now-in-gitignore
I had to remove the tracking on each individual repo, then add, commit and push the change. Luckily it was only a few.

@awaism131
Copy link

I couldn't get this to work on Windows 10 and had to try a different solution. So, putting it here in case it helps anybody.
The command given above for windows i.e.
git config --global core.excludesfile "%USERPROFILE%\.gitignore"

Did not work for me as it was outputting the path with backslashes like this (notice the escaped backslash as well):
C:\Users\MYUSERNAME\\.gitignore_global

After a lot of googling, I gave up and simply tried the hardcoded absolute path with forward slashes and without any quotes, and it worked. Like below:
C:/Users/MYUSERNAME/.gitignore_global

@hbroer
Copy link

hbroer commented Jun 30, 2023

For windows user I would recommend always to use git bash. Makes life much easier. Than it is also the same on windows, mac and linux:

git config --global core.excludesfile ~/.gitignore

@kobros-tech
Copy link

also to view all custom configurations:
git config --list --show-origin

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment