When the command we are about to execute wants to create a repository
(i.e. the command is `init` or `clone`), we *must not* look for a
repository config.
Signed-off-by: Johannes Schindelin <johannes.schinde...@gmx.de>
---
 cache.h  | 2 +-
 config.c | 3 ++-
 git.c    | 3 +++
 3 files changed, 6 insertions(+), 2 deletions(-)

diff --git a/cache.h b/cache.h
index 6b6780064f0..0af7141242f 100644
--- a/cache.h
+++ b/cache.h
@@ -2070,7 +2070,7 @@ const char *split_cmdline_strerror(int cmdline_errno);
 
 /* setup.c */
 struct startup_info {
-       int have_repository;
+       int have_repository, creating_repository;
        const char *prefix;
 };
 extern struct startup_info *startup_info;
diff --git a/config.c b/config.c
index 9cfbeafd04c..980fcc6ff2e 100644
--- a/config.c
+++ b/config.c
@@ -1434,7 +1434,8 @@ void read_early_config(config_fn_t cb, void *data)
         * valid repository), and would rarely make things worse (i.e., you do
         * not generally have a .git/config file sitting around).
         */
-       if (!startup_info->have_repository) {
+       if (!startup_info->creating_repository &&
+           !startup_info->have_repository) {
                struct git_config_source repo_config;
 
                memset(&repo_config, 0, sizeof(repo_config));
diff --git a/git.c b/git.c
index 33f52acbcc8..9fb9bb90a21 100644
--- a/git.c
+++ b/git.c
@@ -337,6 +337,9 @@ static int run_builtin(struct cmd_struct *p, int argc, 
const char **argv)
        struct stat st;
        const char *prefix;
 
+       if (p->fn == cmd_init_db || p->fn == cmd_clone)
+               startup_info->creating_repository = 1;
+
        prefix = NULL;
        help = argc == 2 && !strcmp(argv[1], "-h");
        if (!help) {
-- 
2.12.0.windows.1.3.g8a117c48243


Reply via email to