The interdiff: diff --git a/builtin-clone.c b/builtin-clone.c index a45179c..ecdcefa 100644 --- a/builtin-clone.c +++ b/builtin-clone.c @@ -347,6 +347,7 @@ int cmd_clone(int argc, const char **argv, const char *prefix) char branch_top[256], key[256], value[256]; struct strbuf reflog_msg; struct transport *transport = NULL; + char *src_ref_prefix = "refs/heads/"; struct refspec refspec; @@ -445,7 +446,9 @@ int cmd_clone(int argc, const char **argv, const char *prefix) git_config(git_default_config, NULL); if (option_bare) { - strcpy(branch_top, "refs/heads/"); + if (option_mirror) + src_ref_prefix = "refs/"; + strcpy(branch_top, src_ref_prefix); git_config_set("core.bare", "true"); } else { @@ -455,18 +458,24 @@ int cmd_clone(int argc, const char **argv, const char *prefix) if (option_mirror || !option_bare) { /* Configure the remote */ + if (option_mirror) { + snprintf(key, sizeof(key), + "remote.%s.mirror", option_origin); + git_config_set(key, "true"); + } + snprintf(key, sizeof(key), "remote.%s.url", option_origin); git_config_set(key, repo); snprintf(key, sizeof(key), "remote.%s.fetch", option_origin); snprintf(value, sizeof(value), - "+refs/heads/*:%s*", branch_top); + "+%s*:%s*", src_ref_prefix, branch_top); git_config_set_multivar(key, value, "^$", 0); } refspec.force = 0; refspec.pattern = 1; - refspec.src = "refs/heads/"; + refspec.src = src_ref_prefix; refspec.dst = branch_top; if (path && !is_bundle) diff --git a/t/t5601-clone.sh b/t/t5601-clone.sh index 4b2533f..9cd5ef4 100755 --- a/t/t5601-clone.sh +++ b/t/t5601-clone.sh @@ -76,7 +76,7 @@ test_expect_success 'clone --mirror' ' test -f mirror/HEAD && test ! -f mirror/file && FETCH="$(cd mirror && git config remote.origin.fetch)" && - test "+refs/heads/*:refs/heads/*" = "$FETCH" + test "+refs/*:refs/*" = "$FETCH" ' -- 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