hoi :) On Sat, Dec 02, 2006 at 12:34:31AM +0100, sf wrote: > > Now your submodule is no longer seen as an independent git repository > > and I think this would cause problems when you want to push/pull between > > the submodule and its upstream repository. > > You can always pick a single commit or several commits out of a larger > repository and have a complete git repository. > > And I already explained how to push and pull even from within superprojects. Sure it you are able to make it work, but it needs more work on the UI part. How do you handle the index? How do you allow to clone only the submodule? I really thought about such a setup too, but then decided that it is much easier to work with submodules when you can really see it as a repository of its own. > > But you could still call the "xdiff" part of the git repository a > > submodule. And then changes to the xdiff directory result in a new > > submodule commit, even when there is no direct reference to it. > > So you'd still "commit to the xdiff submodule". > > Let's make certain that we understand each other. I see a clear > distinction between the submodule code in a supermodule branch (commits > in the supermodule's tree and nothing else) and submodule branches which > are independent of the superproject. Supermodule branches and submodule > branches do not interact, only if I want them to. Agreed. I think the thing which caused some discussion is that I make the current submodule commit which is used by the supermodule available in a refs/head in the submodule. So there is one "branch" in the submodule which corresponds to the version used by the supermodule, but this is just for user interface. It's most important purpose is to give this special commit a name, so that it can be used in merges, etc. By selecting another refs/heads "branch" in the submodule you can also easily detach the submodule from the supermodule. It is really important to understand that you can't branch the submodule alone and still have it connected to the supermodule, because the supermodule always tracks only one commit for each submodule. So every branch that affects the project has to be done on project (topmost supermodule) level. But of course the submodule can have other branches which are not tracked by the supermodule. So by checking out refs/heads/master (as it is used in my implementation) you can attach the submodule to the supermodule (attach as in: bring the working directory in sync with the whole project), and you can detach it by selecting another refs/heads (the submodule is still part of the supermodule, but not in the state which is currently visible in the working directory). This may sound confusing, but it really is the only semantic for submodule branches that makes sense. There are fears that you may commit something that does not match your current working directory. Sure, but you explicitly asked for it and I think it won't be a problem if git-status tells about this fact. > The double slashes is the only way I can think of that clearly indicates > that I do not mean the contents named by the path, but the commit that > you find there. Once you have named a commit in that way, you can > continue to apply other revision naming suffixes, paths, and so on. With the current semantics, you can already get to the submodule commit (just leave out your double slashes), but what is missing is simply to apply all the modifiers again on this submodule commit. So I think we can do without the double slashes. -- Martin Waitz
Attachment:
signature.asc
Description: Digital signature