diff --git a/dir.c b/dir.c index 23b6de47036839ca4297a9b93d1a9794547ccff1..e67b6f9b8bf95b284ee6976f4968eba80e281b8d 100644 --- a/dir.c +++ b/dir.c @@ -1530,15 +1530,19 @@ void setup_standard_excludes(struct dir_struct *dir) char *xdg_path; dir->exclude_per_dir = ".gitignore"; - path = git_path("info/exclude"); + + /* core.excludefile defaulting to $XDG_HOME/git/ignore */ if (!excludes_file) { home_config_paths(NULL, &xdg_path, "ignore"); excludes_file = xdg_path; } - if (!access_or_warn(path, R_OK, 0)) - add_excludes_from_file(dir, path); if (excludes_file && !access_or_warn(excludes_file, R_OK, 0)) add_excludes_from_file(dir, excludes_file); + + /* per repository user preference */ + path = git_path("info/exclude"); + if (!access_or_warn(path, R_OK, 0)) + add_excludes_from_file(dir, path); } int remove_path(const char *name) diff --git a/t/t0008-ignores.sh b/t/t0008-ignores.sh index b4d98e602f7422009599e58f0a7ae943476b1c7e..38405de17d6f9625a07080d4fc2e4b4541351cc5 100755 --- a/t/t0008-ignores.sh +++ b/t/t0008-ignores.sh @@ -775,4 +775,14 @@ test_expect_success PIPE 'streaming support for --stdin' ' echo "$response" | grep "^:: two" ' +test_expect_success 'info/exclude trumps core.excludesfile' ' + echo >>global-excludes usually-ignored && + echo >>.git/info/exclude "!usually-ignored" && + >usually-ignored && + echo "?? usually-ignored" >expect && + + git status --porcelain usually-ignored >actual && + test_cmp expect actual +' + test_done