Nesting Git Repositories 258 words published on April 24, 2024.

So I had an idea last night… what if we could simply nest git repositories inside each other, without all the added complexity of git-submodule?

Consider for a moment a scenario like the one I have. During my years at school I collected a bunch of repos for each class e.g. cs2500, each with their own history. Then, I wanted to put them all together under a new repo named school. A perfect use case for submodules, no? But the issue is I didn’t want to manage updating two repos and remotes every time I touched anything. Wouldn’t it be nice if all I needed to do was mv cs2500 school and git could handle the nested .git directory as a sort of subrepository.

With this setup, I imagine history would simply be the union of all subrepositories’ histories, and a commit to cs2500 would only change the contents of cs2500/.git. At any point I should be able to move back out the subrepository with mv school/cs2500 cs2500 and have all my progress persevered.

This is just the very beginnings of an idea, so I expect there are a lot of edge cases and blatant issues with it, but I do think there could be something here worth thinking about. People often shy away from using submodules because of the overhead they add. So giving a new way to manage nested repositories could go a long way for organizing things inside git.