Set git config values for all child folders

As mentioned by NateEag’s edit, git’s Conditional Includes are perfect for this. Since that answer’s the one for people on git < 2.13, here’s one for those who have newer versions.

First, create a new config file somewhere with the settings you want to take effect in the sub-folders – using the original question’s folders, let’s say it’s at ~/topLevelFolder1/.gitconfig_include

In ~/.gitconfig, add:

[includeIf "gitdir:~/toplevelFolder1/"]
    path = ~/topLevelFolder1/.gitconfig_include

Any subfolder of ~/topLevelFolder1 will now include the config in ~/toplevelFolder1/.gitconfig_include – there isn’t a need to manually change the .git/config in each subfolder’s repo. (This doesn’t override whatever’s in the subfolder config – it just adds to it, as “include” implies.)

Notes:

  • This setting should be located after the config you want to override in ~/.gitconfig because includeIf will be overridden again by any config that comes after it.
  • This setting includes the file only if you are in a repository under the given path. It’s ignored if you’re in any non-repository sub-path.
  • The trailing forward slash (/) in the gitdir condition is important.
  • git config --list is good for testing this. You’ll see any overrides below includeIf lines in the output. You can also check specific entries with, e.g., git config --get user.email
  • On Git for Windows, specify paths relative to your user directory with ~/ and absolute paths with the Windows-style drive, like C:/ using forward slashes only. Backslashes and Unix-style mount points like /c/ don’t work. Furthermore, in the includeIf part, you must specify the path with the correct case as the comparisons are case sensitive.

Leave a Comment