When we talk about Git configurations, there are typically three levels we consider:
- System-level configuration: This is applicable to every user on the system and all their repositories.
- Global-level configuration: This is user-specific and applies to all repositories under the user.
Repository-level configuration: This is repository-specific and applies to the specific repository only. It's defined in
.git/configin the root directory of the repository.
However, what if you want to have a configuration that applies to all repositories within a specific directory, but not elsewhere 🤔 Unfortunately this is not natively supported by Git , but there is a workaround using the
includeIf directive 🤩.
includeIf directive was introduced in Git version 2.13.0. It allows for conditional inclusion of configuration files based on the repository's path. We can use this feature to simulate directory-level Git configurations. Here's how to do it:
- Create a directory-specific config file
First, create a
.gitconfig file in the directory where you want to apply directory-level configurations. In this file, you can specify your configurations.
For example, let's say you create a file at
[user] name = Directory Specific Name email = firstname.lastname@example.org
- Update your global config file to include the directory-specific file
Next, you need to update your global
.gitconfig file to include the directory-specific file when in the specified directory. You can do this using the
~/.gitconfig file (or create it if it doesn't exist) and add the following:
[includeIf "gitdir:/path/to/your/directory/"] path = /path/to/your/directory/.gitconfig
Now, whenever you're working in
/path/to/your/directory/ or any of its subdirectories, Git will apply the configurations from
includeIf directive provides a powerful way to handle Git configurations. While it's not a native solution for directory-level configurations, it's a practical workaround for when you need different configurations for different project groups, especially when these groups are organised in separate directories.
includeIf directive was added in Git 2.13.0, so make sure you have a compatible version of Git installed.
Happy Gitting 💻!