Ping! (now that the holidays are past) craig On Tue, Dec 23, 2014 at 1:51 PM, Craig Silverstein <csilvers@xxxxxxxxxxxxxxx> wrote: > [Ack, I forgot to cc myself on the original patch so now I can't reply > to it normally. Hopefully my workaround doesn't mess up the threading > too badly.] > > Junio C Hamano <gitster <at> pobox.com> writes: >> >> Hmmmm, does that mean that the submodule S in the original >> repository O's working tree and its checkout in the secondary >> working tree W created from O using git-new-workdir share the same >> repository location? More specifically: >> >> O/.git/ - original repository >> O/.git/index - worktree state in O >> O/S - submodule S's checkout in O >> O/S/.git - a gitfile pointing to O/.git/modules/S >> O/.git/modules/S - submodule S's repository contents >> O/.git/modules/S/config - submodule S's config >> >> W/.git/ - secondary working tree >> W/.git/config - symlink to O/.git/config >> W/.git/index - worktree state in W (independent of O) >> W/S - submodule S's checkout in W (independent of O) >> W/S/.git - a gitfile pointing to O/.git/modules/S > > Right until the last line. The .git file holds a relative path (at > least, it always does in my experience), so W/S/.git will point to > W/.git/modules/S. > > Also, to complete the story, my changes sets the following: > > W/.git/modules/S - secondary working tree for S > W/.git/modules/S/config - symlink to O/.git/modules/S/config > W/.git/modules/S/index - worktree state in W's S > (independent of O and O's S) > >> Doesn't a submodule checkout keep some state tied to the working >> tree in its repository configuration file? > > Do you mean, in 'config' itself? If so, I don't see it. (Though it's > possible there are ways to use submodules that do keep working-tree > state in the config file, and we just happen not to use those ways.) > Here's what my webapp/.git/modules/khan-exercises/config looks like: > --- > [core] > repositoryformatversion = 0 > filemode = true > bare = false > logallrefupdates = true > worktree = ../../../khan-exercises > [remote "origin"] > url = http://github.com/Khan/khan-exercises.git > fetch = +refs/heads/*:refs/remotes/origin/* > [branch "master"] > remote = origin > merge = refs/heads/master > rebase = true > [submodule "test/qunit"] > url = https://github.com/jquery/qunit.git > -- > > The only thing that seems vaguely working-tree related is the > 'worktree' field, which is the field that motivated me to set up my > patch the way it is. > >> Wouldn't this change >> introduce problems by sharing O/.git/modules/S/config between the >> two checkouts? > > It's true that this change does result in sharing that file, so if > that's problematic then you're right. I'm afraid I don't know all the > things that can go into a submodule config file. > > (There are other things I don't know as well, such as: do we see .git > files with 'gitdir: ...' contents only for submodules, or are there > other ways to create them as well? Are 'gitdir' paths always > relative? Are there special files in .git (or rather .git/modules/S) > that exist only for submodules and not for 'normal' repos, that we > need to worry about symlinking? I apologize for not knowing all these > git internals, and hope you guys can help point out any gaps that > affect this patch!) > > craig -- 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