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
~/.gitconfigbecauseincludeIfwill 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 thegitdircondition is important. git config --listis good for testing this. You’ll see any overrides belowincludeIflines 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 theincludeIfpart, you must specify the path with the correct case as the comparisons are case sensitive.