On Tue, Dec 8, 2015 at 8:03 PM, Junio C Hamano <gitster@xxxxxxxxx> wrote: > Christian Couder <christian.couder@xxxxxxxxx> writes: > >> Doing: >> >> cd /tmp >> git --git-dir=/git/somewhere/else/.git update-index --untracked-cache >> >> doesn't work how one would expect. It hardcodes "/tmp" as the directory >> that "works" into the index, so if you use the working tree, you'll >> never use the untracked cache. > > I think your "expectation" needs to be more explicitly spelled out. > > "git -C /tmp --git-dir=/git/somewhere/else/.git" is a valid way to > use that repository you have in somewhere else to track things under > /tmp/ (as you are only passing GIT_DIR but not GIT_WORK_TREE, the > cwd, i.e. /tmp, is the root level of the working tree), and for such > a usage, the above command works as expected. Perhaps > > Attempting to flip the untracked-cache feature on for a random index > file with > > cd /random/unrelated/place > git --git-dir=/somewhere/else/.git update-index --untracked-cache > > would not work as you might expect. Because flipping the > feature on in the index also records the location of the > corresponding working tree (/random/unrelated/place in the above > example), when the index is subsequently used to keep track of > files in the working tree in /somewhere/else, the feature is > disabled. > > may be an improvement. Yeah, I agree that it is better. I have included your explanations in the next version I will send. Thanks. > The index already implicitly records where the working tree was and > that is not limited to untracked-cache option. For example, if you > have your repository and its working tree in /git/somewhere/else, > which does not have a path X, then doing: > > cd /tmp && >tmp/X > git --git-dir=/git/somewhere/else/.git update-index --add X > > would store X taken from /tmp in the index, so subsequent use of the > index "knows" about X that was taken outside /git/somewhere/else/ > after the above command finishes and the subsequent use is made > without the --git-dir parameter, e.g. > > cd /git/somewhere/else/ && git diff-index --cached HEAD' > > would say that you added X, even though /git/somewhere/else/ may not > have that X at all. And this is not limited to update-index, > either. You can temporarily use --git-dir with "git add X" and the > result would persist the same way in the index. > > I think the moral of the story is that you are not expected to > randomly use git-dir and git-work-tree to point at different places > without knowing what you are doing, and we may need a way to help > people understand what is going on when it is done by a mistake. Yeah, I agree, and I think displaying more information might be a good way. > The patch to show result from xgetcwd() and get_git_work_tree() may > be a step in the right direction, but if the user is not doing > anything fancy, "Testing mtime in /long/path/to/the/directory" would > be irritatingly verbose. Yeah, but after this series only "--test-untracked-cache" does any testing, and the 10 seconds time it takes are probably more irritating than its output. > I wonder if it is easy to tell when the user is doing such an > unnatural thing. Off the top of my head, when the working tree is > anywhere other than one level above $GIT_DIR, the user is doing > something unusual; I do not know if there are cases where the user > is doing something unnatural if $GIT_WORK_TREE is one level above > $GIT_DIR, though. Yeah, it could only print a warning in case something unusual is done. I am not sure it is worth it though. Thanks, Christian. -- 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