]> git.ipfire.org Git - thirdparty/git.git/commitdiff
init: provide useful advice about init.defaultBranch
authorJohannes Schindelin <johannes.schindelin@gmx.de>
Fri, 11 Dec 2020 11:36:57 +0000 (11:36 +0000)
committerJunio C Hamano <gitster@pobox.com>
Sun, 13 Dec 2020 23:53:51 +0000 (15:53 -0800)
To give ample warning for users wishing to override Git's the fall-back
for an unconfigured `init.defaultBranch` (in case we decide to change it
in a future Git version), let's introduce some advice that is shown upon
`git init` when that value is not set.

Note: two test cases in Git's test suite want to verify that the
`stderr` output of `git init` is empty. It is now necessary to suppress
the advice, we now do that via the `init.defaultBranch` setting. While
not strictly necessary, we also set this to `false` in
`test_create_repo()`.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
refs.c
t/t0001-init.sh
t/t1510-repo-setup.sh
t/test-lib-functions.sh

diff --git a/refs.c b/refs.c
index 8df03122d69d911d6222d0891a8b1826fbae85c8..13dc2c3291b398aae7c9797155363922def64eff 100644 (file)
--- a/refs.c
+++ b/refs.c
@@ -562,6 +562,19 @@ void expand_ref_prefix(struct strvec *prefixes, const char *prefix)
                strvec_pushf(prefixes, *p, len, prefix);
 }
 
+static const char default_branch_name_advice[] = N_(
+"Using '%s' as the name for the initial branch. This default branch name\n"
+"is subject to change. To configure the initial branch name to use in all\n"
+"of your new repositories, which will suppress this warning, call:\n"
+"\n"
+"\tgit config --global init.defaultBranch <name>\n"
+"\n"
+"Names commonly chosen instead of 'master' are 'main', 'trunk' and\n"
+"'development'. The just-created branch can be renamed via this command:\n"
+"\n"
+"\tgit branch -m <name>\n"
+);
+
 char *repo_default_branch_name(struct repository *r, int quiet)
 {
        const char *config_key = "init.defaultbranch";
@@ -574,8 +587,11 @@ char *repo_default_branch_name(struct repository *r, int quiet)
        else if (repo_config_get_string(r, config_key, &ret) < 0)
                die(_("could not retrieve `%s`"), config_display_key);
 
-       if (!ret)
+       if (!ret) {
                ret = xstrdup("master");
+               if (!quiet)
+                       advise(_(default_branch_name_advice), ret);
+       }
 
        full_ref = xstrfmt("refs/heads/%s", ret);
        if (check_refname_format(full_ref, 0))
index bb23e56a1659e2dede5c67a545b371c8178c1cb4..0803994874f91659551ac5e9f1a8c0b484430cfe 100755 (executable)
@@ -163,7 +163,7 @@ test_expect_success 'reinit' '
        (
                mkdir again &&
                cd again &&
-               git init >out1 2>err1 &&
+               git -c init.defaultBranch=initial init >out1 2>err1 &&
                git init >out2 2>err2
        ) &&
        test_i18ngrep "Initialized empty" again/out1 &&
@@ -558,6 +558,13 @@ test_expect_success 'overridden default initial branch name (config)' '
        grep nmb actual
 '
 
+test_expect_success 'advice on unconfigured init.defaultBranch' '
+       GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME= git -c color.advice=always \
+               init unconfigured-default-branch-name 2>err &&
+       test_decode_color <err >decoded &&
+       test_i18ngrep "<YELLOW>hint: " decoded
+'
+
 test_expect_success 'overridden default main branch name (env)' '
        test_config_global init.defaultBranch nmb &&
        GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME=env git init main-branch-env &&
index 9974457f5615c9c9204ebfaff6d42c621836fdec..bbfe05b8e4a5c4c13e531647bfa460c0a552de2e 100755 (executable)
@@ -79,7 +79,7 @@ setup_repo () {
        name=$1 worktreecfg=$2 gitfile=$3 barecfg=$4 &&
        sane_unset GIT_DIR GIT_WORK_TREE &&
 
-       git init "$name" &&
+       git -c init.defaultBranch=initial init "$name" &&
        maybe_config "$name/.git/config" core.worktree "$worktreecfg" &&
        maybe_config "$name/.git/config" core.bare "$barecfg" &&
        mkdir -p "$name/sub/sub" &&
index 59bbf75e8320d4ea1b77a36454b9d289449dadec..9910102ae1f3301af72aee13d9c465351ee96a2e 100644 (file)
@@ -1202,7 +1202,9 @@ test_create_repo () {
        mkdir -p "$repo"
        (
                cd "$repo" || error "Cannot setup test environment"
-               "${GIT_TEST_INSTALLED:-$GIT_EXEC_PATH}/git$X" init \
+               "${GIT_TEST_INSTALLED:-$GIT_EXEC_PATH}/git$X" -c \
+                       init.defaultBranch="${GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME-master}" \
+                       init \
                        "--template=$GIT_BUILD_DIR/templates/blt/" >&3 2>&4 ||
                error "cannot run git init -- have you built things yet?"
                mv .git/hooks .git/hooks-disabled