This happens because setup_git_directory_gently() ends up setting GIT_DIR_ENVIRONMENT to "." if it detects that we are in the .git directory, and then a subsequent call to setup_git_directory() calls setup_git_directory_gently() again, which sees the GIT_DIR_ENVIRONMENT and ends up calling set_work_tree(). The comment to set_work_tree() says it's only called if GIT_DIR is set and calls what it does "old behavior". I assume it exists for some sort of backwards compatibility, but in quick testing simply commenting out line 266 of setup.c (the call to set_work_tree) makes `git st` work as expected. I'm not sure if this will have any adverse effect on anything else. Does anybody know if this will cause problems?
Another option that seems like it should work is checking if we're a bare repo, and if not then setting the work tree to our parent dir, assuming any relevant config values or env variables aren't set that would point elsewhere. I would try and implement this but after looking at it for a few minutes, I fear 4AM is not the best of times to try and figure out how this code works.
-Kevin Ballard -- Kevin Ballard http://kevin.sb.org kevin@xxxxxx http://www.tildesoft.com
<<attachment: smime.p7s>>