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
becauseincludeIf
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 thegitdir
condition is important. git config --list
is good for testing this. You’ll see any overrides belowincludeIf
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, likeC:/
using forward slashes only. Backslashes and Unix-style mount points like/c/
don’t work. Furthermore, in theincludeIf
part, you must specify the path with the correct case as the comparisons are case sensitive.