There are cases in which reading the 'active' config from the .gitmodules file can be useful. For instance, if you are working in a feature branch in the superproject and that feature requires some submodules to be active, it is redundant to each time any new developer that checks out this feature branch to also mark as active these submodules. This way, when you record the contents of the superproject in a commit you can also record which submodules where active at the moment. You can have git reading first the active config from .git/config, and if that configuration is not present use the one in .gitmodules to allow compatibility with older versions of git. If you read the url configuration from the .gitmodules file the same way, you wouldn't have to initialize each time the submodules.