On Wednesday 09 June 2010, Jens Lehmann wrote: > Am 08.06.2010 23:52, schrieb Johan Herland: > > The good thing with Ævar's approach is that this is all configurable > > per branch (indeed, per commit[1]) by editing your .gitmodules file. > > Yep, I think this is the sane way to do that. > > > Interesting. Will the object parsing machinery handle that without > > hiccups? What if an older Git version tries to checkout/update a > > submodule with a 0- hash? > > Maybe Ævar's idea of dropping such a submodule from the tree is better. Agreed. That will of course cause older Git versions to skip the submodule altogether, which is probably the safest failure mode. > > Me too, but I suspect that if you draw the "one big repo" approach to > > its logical conclusion, there will be some demand for recursive > > commits. > > You may be right here. But as submodules often have a detached HEAD, this > might get interesting ;-) Yes, trying to recursively commit across a submodule with detached HEAD should obviously fail (at least by default). But as long as a local branch is checked out in the submodule (which is not necessarily the same as having the submodule _track_ that branch), a recursive commit should be relatively straightforward. > > [1]: Say your submodule usually tracks a branch, but you're creating > > some tag in the super-repo, and you want that tag to uniquely identify > > the submodule. You achieve this by making sure the tagged commit > > removes the relevant "branch = whatever" line from .gitmodules, and > > records the appropriate submodule version in the super-repo tree. > > Then, you can revert the .gitmodules change on the next commit to > > resume tracking the submodule branch. > > > > Now, whenever you checkout the tag, you will always get the exact same > > version of the submodule, although the submodule otherwise tracks some > > branch. > > Won't work anymore when we would use 0{40} or drop it from the tree. > AFAICS always-tip and referencing a certain commit don't mix well. AFAICS, it would still work as long as it exists in the tree for that specific commit (but is missing/0{40} in other commits). We're not mixing "always-tip" and "exact-commit" in the same commit. We use "always-tip" in regular commits, and then temporarily switch to "exact- commit" in the commits where a certain submodule version is required. ...Johan -- Johan Herland, <johan@xxxxxxxxxxx> www.herland.net -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html