# Git Quick Tip: Using a Global Gitignore

Did you know Git supports a global `.gitignore` file that can be used across all of your local repositories?

## Getting Started

To get started, let's create a file named `ignore` in the `~/.config/git` folder. You may need to create this folder if it does not already exist.

```bash
mkdir -p ~/.config/git && touch ~/.config/git/ignore
```

In the file, we can add some patterns to ignore across all files.

```plaintext
# Ignore files generated by operating systems
.DS_Store
Thumbs.db
```

Git should automatically load this file. The patterns in the global file are merged with any other `.gitignore` files in your repositories.

If you wanted to put the file in another location, you would need to update the Git configuration to point to the file. For example, if I had a `~/Code/` folder where I store all of my projects, I could create my file there: `~/Code/.gitignore_global`. Then, I can run the following command to update my Git configuration.

```bash
git config --global core.excludesfile ~/Code/.gitignore_global
```

## What Should I Add to My Global Gitignore?

What other types of files can be ignored globally? A lot of developers like to ignore the default editor/IDE folders like `.vscode` and `.idea`. This would depend on your project though, some projects commit some of the files in these folders.

You can also ignore package folders like `node_modules` and `vendor` for PHP Composer.

Generated files can also usually be ignored globally. These files usually exist in the `build/` or `dist/` folders.

Another great ignore to add is `.env`. These are used in projects of all types and usually contain sensitive information like API keys and passwords, so it's nice to have some extra protection to make sure you don't accidentally commit the file.

The global `.gitignore` can also support things specific to your workflow. For example, when working in JetBrains IDEs, I love using scratch files to store notes and pseudo code I might have when coding. If I am using something like Vim or VSCode though, then my scratch files aren't supported. So instead, I add `.scratch/` to me global `.gitignore` and then I can create markdown files or whatever else I might want there without it being committed. I also use `.http` to store JetBrains HTTP requests if I don't want them committed to the project. Read my post about the [PhpStorm HTTP client and requests](https://seankegel.com/simplify-api-testing-with-phpstorm-http-requests) to learn more.

## Gitignore Example

Below is my current global `.gitignore`:

```plaintext
# OS files
.DS_Store
.AppleDouble
.LSOverride
Thumbs.db
ehthumbs.db
Desktop.ini

# Editor Files
*.swp
*.swo
*.swn
*.swm
*.swl
*.swk
*.bak
*.backup
*.orig
*.ref
*~

# Logs
*.log
log.txt

# Generated files
build/
dist/

# Dependencies
node_modules/
vendor/

# Sensitive files
*.env
*.key
*.pem
*.credentials
*.password
*.secret

# Scratch files
.scratch/

# PhpStorm HTTP Requests
.http/
```

## Conclusion

Using a global `.gitignore` is helpful to make sure you aren't committing files that shouldn't be committed. Most of these items should already be in the project's `.gitignore`, however, that might not always be the case.

Also, I don't like adding items to a project's `.gitignore` that don't apply to all developers, like my `.http/` or `.scratch`. This is where a global `.gitignore` shines as it lets you add items relevant to your workflows.

For more information, you can refer to the GitHub documentation which has some great content including templates and links to the Git documentation.

* [Ignoring files - GitHub Docs](https://docs.github.com/en/get-started/getting-started-with-git/ignoring-files#configuring-ignored-files-for-all-repositories-on-your-computer)
    

Let me know in the comments if you have any other helpful items to add to the global `.gitignore`. I would love to hear about any custom workflows you might have that having the global ignore helps support. Thanks for reading!
