On Fri, Oct 07, 2022 at 02:13:12PM -0700, Junio C Hamano wrote: > Glen Choo <chooglen@xxxxxxxxxx> writes: > > > - where to get the submodule from during a fetch/clone, e.g. > > `submodule.<name>.url`, `submodule.<name>.branch` > > - information needed for submodules to work correctly, e.g. > > `submodule.<name>.path` > > - default config that gets populated in .git/config via `git submodule > > init`, e.g. `submodule.<name>.update`, > > `submodule.<name>.fetchRecurseSubmodules` > > > > With respect to config, the general stance is that .gitmodules is meant > > to provide defaults for .git/config and _not_ to be read directly (see > > Ævar's answer). > > I think that is a sensible way to think about this. > > It is more like "suggestion made by the upstream", to be taken after > examining it, just like you should type "make" after examining the > Makefile. At least enough to trust its contents ;-) > > > There are some very limited cases where config is read > > directly from .gitmodules, but that approach is very frowned upon and > > it's unlikely that we'll add more of them in the future. > > Yup, we should be careful and see if we can get rid of existing > uses. > > Thanks. Fundamentally the problem we encounter regularly is this: qemu is superproject, ui/keycodemapdb is subproject. I have a change on master setting the submodule commit: qemu$ git show master | grep +Sub +Subproject commit 7381b9bfadd31c4c9e9a10b5bb5032f9189d4352 and check it out: qemu$ git submodule update --init ui/keycodemapdb Submodule 'ui/keycodemapdb' (https://gitlab.com/qemu-project/keycodemapdb.git) registered for path 'ui/keycodemapdb' Submodule path 'ui/keycodemapdb': checked out '7381b9bfadd31c4c9e9a10b5bb5032f9189d4352' In another branch I have a different commit: qemu$ git show sub-foo | grep +Sub +Subproject commit 57ba70da5312170883a3d622cd2aa3fd0e2ec7ae Now I switch branches and nothing happens, the submodule is marked as dirty: qemu$ git checkout sub-foo M ui/keycodemapdb Switched to branch 'sub-foo' qemu$ (cd ui/keycodemapdb && git show | head -1) commit 7381b9bfadd31c4c9e9a10b5bb5032f9189d4352 it is now very easy to generate incorrect code: - git commit -a will commit the change to submodule - any build will use a mix of super and subproject that is completely untested As a result people are basically saying avoid using submodules but I am wondering whether git can be tweaked to do the right thing by default. I understand we can work around it by asking everyone to create a correct config, but can't we make it DTRT by default to reduce friction? -- MST