Exploring Git configuration Levels: Customizing your Workflow


Git is one of the most popular version control systems used by developers worldwide. It allows teams to work on projects simultaneously, tracking changes and ensuring code integrity. A critical but often overlooked aspect of Git is its configurable nature, allowing users to customize their workflows to a great extent. In this post, we will delve into the different levels of Git configuration and learn how to leverage them to tailor our workflows.

Understanding Git Configuration Levels

Git configuration settings can be stored at three levels, each with a specific scope:

  1. System level: These settings apply to every user and all repositories on your system.
  2. Global level: These settings apply to all repositories for the current user on the system.
  3. Local level: These settings apply only to the current repository.

The configuration levels also have a priority sequence – local level overrides global level, and global level overrides system level.

System Level Configuration

The system-level configuration applies to every user on the system and all their repositories. The configuration file is typically stored in the /etc/gitconfig file. To view or set system level configurations, use the --system flag with the git config command:

# view system level configurations 
git config --system --list 

# set a system level configuration 
git config --system core.editor nano

The second command sets nano as the default text editor for Git for all system users.

Global Level Configuration

Global level configurations are specific to your user and are effective in all of your repositories. The configuration file is typically found in your home directory: ~/.gitconfig. You can view or set global level configurations using the --global flag:

# view global level configurations 
git config --global --list 

# set a global level configuration 
git config --global user.name "Your Name"

The second command sets Your Name as the default user name for all your Git operations.

Local Level Configuration

Local level configurations are restricted to the current repository you’re working on. The configuration file is located in the .git/config directory within the repository. You can view or set local configurations using the --local flag:

# view local level configurations 
git config --local --list 

# set a local level configuration 
git config --local user.email "[email protected]"

The second command sets [email protected] as the email for the current repository’s Git operations.

Switching Between Configuration Levels

You can switch between different configuration levels by using the respective flags. Remember, the more specific level always takes precedence.

# Change a setting from global to local level 
git config --global --unset user.email 
git config --local user.email "[email protected]"

These commands unset the global user email configuration and then set a new email at the local level.

Practical Application: Customizing Your Workflow with Git Configuration Levels

With a deeper understanding of Git’s configuration levels, you can now optimize your workflow. For instance, if you are working on a project that requires a different email ID than your usual one, you can change the email configuration at the local level without affecting other repositories.

Understanding Git’s configuration levels allows you to streamline and customize your workflow. For example, suppose you have multiple email IDs for different projects. You can set your primary email ID at the global level and then set project-specific email IDs at the local level for individual repositories.

Here is an example:

# Set your primary email ID 
git config --global user.email "[email protected]" 

# Change to your repository directory 
cd path/to/your/repository 

# Set a project-specific email ID 
git config --local user.email "[email protected]"

Now, any commits made in this repository will use “[email protected]“, while commits in other repositories will use “[email protected]“.

Troubleshooting Common Issues

Working with Git configuration levels might bring up a few challenges. Here are a couple of common issues and how to solve them:

Not sure which configuration is currently active? You can view the effective configuration for a repository using git config --list. This command combines settings from all levels, with more specific levels overriding the less specific ones.

Did you set a configuration at the wrong level? Suppose you set your username at the system level by mistake. You can remove it and set it at the global level instead using:

# Remove system level username
git config --system --unset user.name

# Set global level username
git config --global user.name "Your Name"

Frequently Asked Questions (FAQs)

What are the three levels of Git configuration?

The three levels of Git configuration are system, global, and local. System level configuration applies to all users and all repositories on the system, global level configuration is user-specific and applies to all repositories of the current user, while local level configuration applies only to the current repository.

The local level configuration has the highest priority, followed by the global level, and finally, the system level. If there are conflicting settings, Git will use the one from the level with the highest priority.

You can use the git config --list command to view the current effective configuration settings. If you want to see the settings at a specific level, you can use --system, --global, or --local flag with the command.

You can unset a configuration at any level using the --unset flag, and then set it at the correct level. For example, git config --system --unset user.name will remove the username from the system level configuration.

Yes, you can have different settings for different repositories by using the local level configuration. For instance, if you want to use a different email ID for a specific repository, you can set it using git config –local user.email “[email protected]”.

You can change the default text editor at a global level using the git config --global core.editor "your-editor" command. Replace "your-editor" with the command of your preferred editor, like nano, vim, or emacs.

Understanding Git configuration levels allows you to customize your Git experience according to your personal needs or project-specific requirements. For example, you can use different user names, email IDs, or text editors for different projects by setting them at the local level.


Understanding and using Git configuration levels can greatly enhance your coding workflow, offering customization that fits your personal or project-specific needs. As with all things Git, the key is practice. So go ahead, explore these configuration levels, and optimize your Git experience!

References and Further Reading

Related Articles