]> git.ipfire.org Git - thirdparty/git.git/commitdiff
clone: use configured default branch name when appropriate
authorJohannes Schindelin <johannes.schindelin@gmx.de>
Wed, 24 Jun 2020 14:46:34 +0000 (14:46 +0000)
committerJunio C Hamano <gitster@pobox.com>
Wed, 24 Jun 2020 16:14:21 +0000 (09:14 -0700)
When cloning a repository without any branches, Git chooses a default
branch name for the as-yet unborn branch.

As part of the implicit initialization of the local repository, Git just
learned to respect `init.defaultBranch` to choose a different initial
branch name. We now really want that branch name to be used as a
fall-back.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Documentation/config/init.txt
builtin/clone.c
t/t5606-clone-options.sh

index 6ae4a38416ef6dbf992a39734e08132ab82c3ce1..dc77f8c8446801fddbce2dff1ef4e678f431e202 100644 (file)
@@ -3,5 +3,5 @@ init.templateDir::
        (See the "TEMPLATE DIRECTORY" section of linkgit:git-init[1].)
 
 init.defaultBranch::
-       Allows overriding the default branch name when initializing
-       a new repository.
+       Allows overriding the default branch name e.g. when initializing
+       a new repository or when cloning an empty repository.
index 487b0a42d752b7637f87e9e9d76bfe4bf3e53dc5..a924e3d780cf7d750c1e21e3dd9ad43819c9e9a6 100644 (file)
@@ -1264,9 +1264,13 @@ int cmd_clone(int argc, const char **argv, const char *prefix)
                remote_head_points_at = NULL;
                remote_head = NULL;
                option_no_checkout = 1;
-               if (!option_bare)
-                       install_branch_config(0, "master", option_origin,
-                                             "refs/heads/master");
+               if (!option_bare) {
+                       const char *branch = git_default_branch_name();
+                       char *ref = xstrfmt("refs/heads/%s", branch);
+
+                       install_branch_config(0, branch, option_origin, ref);
+                       free(ref);
+               }
        }
 
        write_refspec_config(src_ref_prefix, our_head_points_at,
index 9e24ec88e67f0db8be401f2a60f69c408f39fc02..286bfd93ac2fa218b7f81320ef0dfeef3a0b3c08 100755 (executable)
@@ -35,4 +35,19 @@ test_expect_success 'redirected clone -v does show progress' '
 
 '
 
+test_expect_success 'chooses correct default initial branch name' '
+       git init --bare empty &&
+       git -c init.defaultBranch=up clone empty whats-up &&
+       test refs/heads/up = $(git -C whats-up symbolic-ref HEAD) &&
+       test refs/heads/up = $(git -C whats-up config branch.up.merge)
+'
+
+test_expect_success 'guesses initial branch name correctly' '
+       git init --initial-branch=guess initial-branch &&
+       test_commit -C initial-branch no-spoilers &&
+       git -C initial-branch branch abc guess &&
+       git clone initial-branch is-it &&
+       test refs/heads/guess = $(git -C is-it symbolic-ref HEAD)
+'
+
 test_done