Hi, Joakim Tjernlund wrote: > I am trying to create 3 submodules from the same git repo, each pointing to a different branch. > Since the repo is somewhat large, I don't want the 3 submodules to clone the same repo 3 > times, I want one clone and then have the 3 submodules to point to different commits. > > Is this possible? If not, could it be added? It's an interesting case. You're not the only one that has wanted something like this: for example, "repo" (a similar tool with some differences) included the change [1] (repo: Support multiple branches for the same project, 2014-01-30) for this kind of application. In practice, it's a bit messy. To allow switching to a branch where the submodule is not present, we store the submodule .git directory in the superproject's .git/modules/<submodule name> directory. This is an ordinary .git directory, with files like HEAD config packed-refs [etc] The "git worktree" tool allows having multiple worktrees for a single Git repository. Each worktree has its own HEAD. So the layout would look something like .git/modules/<submodule name>/ config packed-refs [etc] worktrees/ <branch1>/ HEAD <branch2>/ HEAD By piggy-backing on the "git worktree" feature, this should work great, but it will take some work to teach Git to set it up. A side note: as Stefan (cc-ed) mentioned, there is another, related interaction between submodules and "git worktree". Namely: I might want to have multiple worktrees for a single superproject Git repository. In that case, the layout might look something like .git/ HEAD config packed-refs [etc] modules/ <submodule name>/ HEAD config packed-refs ... worktrees/ <branch1>/ HEAD <branch2>/ HEAD The patch that Stefan sent heads in this direction, but it has a problem: if the submodule is checked out in both worktrees, then they cannot have the same HEAD. So to support that goal well would also require supporting the goal you've described as a side effect: each submodule would need to have multiple worktrees, at least one per worktree of the superproject. Sorry, that got a bit contorted after a while. If you'd be interested in pursuing this, I'd be happy to review any thoughts you have (for example if you write a brief design doc). My experience from interacting with the feature [1] is that it is easy to make mistakes when trying to support this kind of case. (repo had some bugs due to, for example, multiple checkouts of a repository trying to run "git prune" at the same time.) The "git worktree" feature should be a good foundation to build on that avoids some of the problems encountered there. Thanks, Jonathan [1] https://gerrit-review.googlesource.com/c/git-repo/+/50715/