Dnia piątek 8. grudnia 2006 23:54, Josef Weidendorfer napisał: > On Friday 08 December 2006 23:18, Jakub Narebski wrote: >> A few (very few) comments: >> >> Josef Weidendorfer wrote: >> >>> This can be implemented by enhancing git to ignore any subdirectory which >>> has a file .gitlink in it. >> >> If I remember correctly, while git ignores .git, it does not ignore >> by default (i.e. without entry in either GIT_DIR/info/excludes, or >> .gitignore) the directory which has .git directory in it. > > I know. But this is essential. We _have_ to ignore all the files and > subdirectories in the directory which contains the .gitlink file, > as these files/subdirectories belong to the submodule. > > There is no other way. You could try to use a special name for the > whole directory with the light-weight checkout, e.g. ".checkout". > > But then, this is useless for submodules, as for submodules, we want to > be able to specify the root directory name of the submodule, as that > is the name which will end up in the tree object of the supermodule. > >> And that should not change for .gitlink. You can always add >> .gitignore file with * .* patterns in it (ignore all). > > That is not possible: > .gitignore file has its own meaning inside of the light-weight > checkout aka submodule, as this directory is the root directory of > a git checkout. I have forgot about that. Right. The only possibility would be to use GIT_DIR/info/excludes with path to submodule, and this conflict with the ability to rename and move submodules. > AFAIK, Martin's submodule support does it the same, only for directories > with .git, as he stores the GITDIR directly in the submodule > checkout. Ah. [...] >> GIT_DIR = path to base git repository >> it is equivalent to setting the following: >> >> GIT_INDEX_FILE = path to index file >> GIT_OBJECT_DIRECTORY = path to object directory >> GIT_HEAD_FILE = path to HEAD file >> GIT_REFS_DIRECTORY = path to refs directory > > AFAIK the latter two do not exist yet, or do they? They do not exist; perhaps they should for completeness. [...] > It is enough if GITDIR and NAME is given. With GITDIR_REAL after the > smart lookup, e.g. GIT_INDEX_FILE would default to $GITDIR_REAL/external/$NAME > and so on. Not $GITDIR_REAL/submodules/<name>/index (or modules instead of submodules)? >> NAME = name >> should match "name subdirectory" entry in modules file in superproject. > > Yes. > This would be in my next proposal about how to build the submodule support > on light-checkouts ;-) I have thought that with "each submodule as separate repository" approach to submodules the modules file would have module name and either subdirectory in which submodule resides, or GIT_DIR of submodule. And this file could be generated on checkout... which doesn't survive closer scrutiny. But this would work well with submodules, that's a fact. >> Perhaps instead of adding arbitrary number of .. in front of relative >> path, we better use some magic, like ... for finding somewhere up? > > I thought about it. But why whould you need it? > If the value of GITDIR in .gitlink begins with "/", it is an absolute path. > If not, I think you always want the smart lookup the go upwards, i.e. > looking for > > ../<relpath>.git > ../../<relpath>.git > ../../../<relpath>.git > > So there is no need to add "..." in front of the relative path. > Or do you see a usecase for > rel/path/start/.../rel/path/end > > Ah, yes, I see. Perhaps this makes sense with absolute paths: > > /home/user/repos/.../linux You mean that the above means to check the following paths: /home/user/repos/linux /home/user/linux /home/linux /linux not the searching subdirectories of /home/user/repos for linux directory (there can be many)? BTW web2c implementation of TeX, namely kpathsea(rch) uses // for that, i.e. a//b means b which is somwehere in subdirectories of a. -- Jakub Narebski Poland - 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