When an explicit '--git-dir' option points to a directory inside the work tree, git treats it as if it were any other directory. In particular, 'git status' lists it as untracked, while 'git add -A' stages the metadata directory entirely Add GIT_DIR to the list of excludes in setup_standard_excludes(), while checking that GIT_DIR is not just '.git', in which case it would be ignored by default, and that GIT_DIR is inside GIT_WORK_TREE Although an analogous comparison of any given path against '.git' is done in treat_path(), this does not seem to be the right place to compare against GIT_DIR. Instead, the excludes provide an effective mechanism of ignoring a file/directory, and adding GIT_DIR as an exclude is equivalent of putting it into '.gitignore'. Function setup_standard_excludes() was chosen because that is the place where the excludes are initialized by the commands that are concerned about excludes Signed-off-by: Pasha Bolokhov <pasha.bolokhov@xxxxxxxxx> --- dir.c | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/dir.c b/dir.c index 98bb50f..07e36f3 100644 --- a/dir.c +++ b/dir.c @@ -1588,6 +1588,26 @@ void setup_standard_excludes(struct dir_struct *dir) { const char *path; char *xdg_path; + const char *gitdir = get_git_dir(); + + /* Add git directory to the ignores first */ + if (strcmp(gitdir, ".git") != 0) { /* "--git-dir" has been given */ + char ngit[PATH_MAX + 1]; + + /* + * See if GIT_DIR is inside the work tree; need to normalize + * 'gitdir' but 'get_git_work_tree()' always appears absolute + * and normalized + */ + normalize_path_copy(ngit, real_path(absolute_path(gitdir))); + + if (dir_inside_of(ngit, get_git_work_tree()) >= 0) { + struct exclude_list *el = add_exclude_list(dir, EXC_CMDL, + "--git-dir option"); + + add_exclude(gitdir, "", 0, el, 0); + } + } dir->exclude_per_dir = ".gitignore"; path = git_path("info/exclude"); -- 1.9.1 -- 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