Learn when to use .git/info/exclude instead of .gitignore for managing ignored files in Git, with practical examples and use cases
When working with Git, we often need to specify files and directories that should be ignored by source control. While .gitignore
is the most commonly used method, Git provides another powerful but lesser-known option: .git/info/exclude
. Let’s explore both approaches and understand when to use each one.
The Traditional Approach: .gitignore
The .gitignore
file is the standard way to specify which files Git should ignore. It’s:
- Committed to the repository
- Shared with all collaborators
- Part of the project’s source control
- Ideal for project-wide ignore patterns
The Hidden Gem: .git/info/exclude
.git/info/exclude
serves a similar purpose but with some key differences. This file:
- Lives inside the
.git
directory - Is not committed to the repository
- Remains local to your machine
- Doesn’t affect other collaborators
When to Use .git/info/exclude
Here are several scenarios where using .git/info/exclude
makes more sense than .gitignore
:
Personal IDE Settings
- You use a different IDE than your team
- Example: Ignoring VSCode settings while others use IntelliJ
.vscode/
Local Development Tools
- You have specific development tools that others don’t use
- Example: Local debugging tools or profilers
debug-tools/ my-profiler.log
Machine-Specific Build Outputs
- Custom build directories that vary by developer
my-custom-build/ local-dist/
Personal Test Files
- Test files you create for local experimentation
my-test-*.js scratch/
Temporary Working Files
- Files you generate during development but don’t want to share
temp-*.txt working-draft/
Real-World Example
Let’s say you’re working on a Node.js project where:
- The team uses
.gitignore
for common patterns:node_modules/ dist/ .env
But you personally:
- Use VSCode for debugging
- Have a custom build script
- Keep local notes
Instead of polluting the project’s .gitignore
, you can add to .git/info/exclude
:
# Personal IDE
.vscode/
launch.json
# Custom build output
my-build/
build-*.log
# Personal notes
dev-notes.md
TODO.txt
Benefits of Using .git/info/exclude
Clean Repository
- Keep the project’s
.gitignore
focused on truly project-wide patterns - Avoid cluttering with personal preferences
- Keep the project’s
No Conflicts
- Your ignore patterns won’t conflict with other developers’ workflows
- No need for team discussions about personal ignore patterns
Flexibility
- Easily modify ignore patterns without creating commits
- Experiment with different tools without affecting the team
Privacy
- Keep your working methods private
- Don’t expose personal tools or workflows
Best Practices
Use
.gitignore
for:- Project-wide ignore patterns
- Framework-specific files
- Common development artifacts
Use
.git/info/exclude
for:- Personal tooling
- Local development artifacts
- Machine-specific patterns
- Temporary working files
Creating and Editing .git/info/exclude
To start using .git/info/exclude
:
|
|
Remember that the syntax is identical to .gitignore
, so all your existing knowledge transfers over.
Conclusion
While .gitignore
remains the primary tool for specifying ignore patterns in Git, .git/info/exclude
provides a valuable complement for managing personal ignore patterns. By understanding and using both tools appropriately, you can maintain a cleaner repository while accommodating individual development workflows.
Cheers! 🍺