How to provide custom Git configuration for different projects

How to provide custom Git configuration for different projects

Git provides an option to load different configurations based on path of repositories. It uses includeIf sections in ~/.gitconfig file, which allow you to include config directives from another source.

Let's assume your projects are grouped by "parent" directories, like directory called company-a contains all projects related to company-a, etc. Therefore, all settings inside that path will be additionally applied from .gitconfig-company-a.

[user]
    email = contact@grzegorzwozniak.com
    name = Grzegorz Wozniak

[includeIf "gitdir:~/dev/company-a"]
    path = .gitconfig-company-a
    
[includeIf "gitdir:~/dev/company-b]
    path = .gitconfig-company-b

[includeIf "gitdir:~/dev/os"]
    path = .gitconfig-os

~/.gitconfig

[user]
    email = contact@company-a.com
    name = Grzegorz Woźniak

~/.gitconfig-company-a

[user]
    email = contact@company-b.com
    name = GW

~/.gitconfig-company-b

[user]
    email = opensource@grzegorzwozniak.com
    name = Grzegorz Wozniak

~/.gitconfig-os