@@ -256,7 +256,7 @@ static void read_remotes_file(struct remote *remote)
static void read_branches_file(struct remote *remote)
{
- char *frag;
+ char *frag, *main_branch = NULL;
struct strbuf buf = STRBUF_INIT;
FILE *f = fopen_or_warn(git_path("branches/%s", remote->name), "r");
@@ -276,7 +276,7 @@ static void read_branches_file(struct remote *remote)
/*
* The branches file would have URL and optionally
- * #branch specified. The "master" (or specified) branch is
+ * #branch specified. The main (or specified) branch is
* fetched and stored in the local branch matching the
* remote name.
*/
@@ -284,7 +284,7 @@ static void read_branches_file(struct remote *remote)
if (frag)
*(frag++) = '\0';
else
- frag = "master";
+ frag = main_branch = git_main_branch_name(MAIN_BRANCH_FOR_INIT);
add_url_alias(remote, strbuf_detach(&buf, NULL));
strbuf_addf(&buf, "refs/heads/%s:refs/heads/%s",
@@ -299,6 +299,7 @@ static void read_branches_file(struct remote *remote)
strbuf_addf(&buf, "HEAD:refs/heads/%s", frag);
refspec_append(&remote->push, buf.buf);
remote->fetch_tags = 1; /* always auto-follow */
+ free(main_branch);
strbuf_release(&buf);
}
@@ -2097,9 +2098,13 @@ struct ref *guess_remote_head(const struct ref *head,
if (head->symref)
return copy_ref(find_ref_by_name(refs, head->symref));
- /* If refs/heads/master could be right, it is. */
+ /* If a remote branch exists with the main branch name, let's use it. */
if (!all) {
- r = find_ref_by_name(refs, "refs/heads/master");
+ char *name = git_main_branch_name(MAIN_BRANCH_FULL_NAME |
+ MAIN_BRANCH_FOR_INIT);
+
+ r = find_ref_by_name(refs, name);
+ free(name);
if (r && oideq(&r->old_oid, &head->old_oid))
return copy_ref(r);
}
@@ -49,7 +49,16 @@ test_expect_success 'guesses main branch name correctly' '
git -C main-branch branch abc guess &&
git clone main-branch is-it &&
test guess = $(git -C is-it config core.mainBranch) &&
- test refs/heads/guess = $(git -C is-it symbolic-ref HEAD)
+ test refs/heads/guess = $(git -C is-it symbolic-ref HEAD) &&
+
+ git -c init.defaultBranch=none init --bare no-head &&
+ git -C main-branch push ../no-head guess abc &&
+ git clone no-head is-it2 &&
+ test_must_fail git -C is-it2 symbolic-ref refs/remotes/origin/HEAD &&
+ git -C no-head update-ref --no-deref HEAD refs/heads/guess &&
+ git -c init.defaultBranch=guess clone no-head is-it3 &&
+ test refs/remotes/origin/guess = \
+ $(git -C is-it3 symbolic-ref refs/remotes/origin/HEAD)
'
test_done