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