Skip to content

Commit 373ad89

Browse files
committed
initial branch: give hints after switching the default name
It is likely that those who came to Git after 3.0 switched the default initial branch name to 'main' would still try to follow tutorials that were written before 3.0 happened and with the assumption that the tool would call the initial branch 'master'. To help these new users after 3.0 boundary, let's retain one part of the hint we will be giving before the default changes, namely, how to rename the branch an unconfigured Git has created just once. We do this without telling them how to permanently configure the default name of the initial branch, and that design choice is very much deliberate. The whole point of switching the default name was because we did not want to force individual users to configure their default branch name but while the hard wired default was 'master', they _had_ to configure it away from 'master' in order to conform to the recent norm, and a hint that tells them how to do so is useful. But once the default is renamed to 'main', that no longer is true. A narrower audience who are new users that follow an instruction that assumes the initial branch name is 'master' would only need to learn "here is how to change the branch name to match the tutorial you are following in the repository you created for practice", and "here is how you keep creating repositories with the first branch with a name everybody hates" is unnecessary. It also needs to be noted that the advise token to squelch the message is the same advice.defaultBranchName as before, which is also very much deliberate. The users who do have that configured are those who _have_ been using Git since before 3.0, and they are not the target audience for the new advice message. Reusing the same advise token ensures that they do not have to turn the message off. Helped-by: Phillip Wood <phillip.wood@dunelm.org.uk> Signed-off-by: Junio C Hamano <gitster@pobox.com>
1 parent 5590b4e commit 373ad89

File tree

5 files changed

+19
-11
lines changed

5 files changed

+19
-11
lines changed

advice.c

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -51,9 +51,7 @@ static struct {
5151
[ADVICE_AM_WORK_DIR] = { "amWorkDir" },
5252
[ADVICE_CHECKOUT_AMBIGUOUS_REMOTE_BRANCH_NAME] = { "checkoutAmbiguousRemoteBranchName" },
5353
[ADVICE_COMMIT_BEFORE_MERGE] = { "commitBeforeMerge" },
54-
#ifndef WITH_BREAKING_CHANGES
5554
[ADVICE_DEFAULT_BRANCH_NAME] = { "defaultBranchName" },
56-
#endif /* WITH_BREAKING_CHANGES */
5755
[ADVICE_DETACHED_HEAD] = { "detachedHead" },
5856
[ADVICE_DIVERGING] = { "diverging" },
5957
[ADVICE_FETCH_SET_HEAD_WARN] = { "fetchRemoteHEADWarn" },

advice.h

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,7 @@ enum advice_type {
1818
ADVICE_AM_WORK_DIR,
1919
ADVICE_CHECKOUT_AMBIGUOUS_REMOTE_BRANCH_NAME,
2020
ADVICE_COMMIT_BEFORE_MERGE,
21-
#ifndef WITH_BREAKING_CHANGES
22-
ADVICE_DEFAULT_BRANCH_NAME,
23-
#endif /* WITH_BREAKING_CHANGES */
21+
ADVICE_DEFAULT_BRANCH_NAME, /* To be retired sometime after Git 3.0 */
2422
ADVICE_DETACHED_HEAD,
2523
ADVICE_DIVERGING,
2624
ADVICE_FETCH_SET_HEAD_WARN,

refs.c

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -641,9 +641,17 @@ static const char default_branch_name_advice[] = N_(
641641
"\n"
642642
"\tgit branch -m <name>\n"
643643
);
644+
#else
645+
static const char default_branch_name_advice[] = N_(
646+
"Using '%s' as the name for the initial branch since Git 3.0.\n"
647+
"If you expected Git to create 'master', the just-created\n"
648+
"branch can be renamed via this command:\n"
649+
"\n"
650+
"\tgit branch -m master\n"
651+
);
644652
#endif /* WITH_BREAKING_CHANGES */
645653

646-
char *repo_default_branch_name(struct repository *r, MAYBE_UNUSED int quiet)
654+
char *repo_default_branch_name(struct repository *r, int quiet)
647655
{
648656
const char *config_key = "init.defaultbranch";
649657
const char *config_display_key = "init.defaultBranch";
@@ -660,10 +668,10 @@ char *repo_default_branch_name(struct repository *r, MAYBE_UNUSED int quiet)
660668
ret = xstrdup("main");
661669
#else
662670
ret = xstrdup("master");
671+
#endif /* WITH_BREAKING_CHANGES */
663672
if (!quiet)
664673
advise_if_enabled(ADVICE_DEFAULT_BRANCH_NAME,
665674
_(default_branch_name_advice), ret);
666-
#endif /* WITH_BREAKING_CHANGES */
667675
}
668676

669677
full_ref = xstrfmt("refs/heads/%s", ret);

t/t0001-init.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -868,7 +868,7 @@ test_expect_success 'overridden default initial branch name (config)' '
868868
grep nmb actual
869869
'
870870

871-
test_expect_success !WITH_BREAKING_CHANGES 'advice on unconfigured init.defaultBranch' '
871+
test_expect_success 'advice on unconfigured init.defaultBranch' '
872872
GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME= git -c color.advice=always \
873873
init unconfigured-default-branch-name 2>err &&
874874
test_decode_color <err >decoded &&

t/test-lib.sh

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -127,13 +127,17 @@ then
127127
export GIT_TEST_DISALLOW_ABBREVIATED_OPTIONS
128128
fi
129129

130+
# Explicitly set the default branch name for testing, to squelch hints
131+
# from "git init" during the transition period. Should be removed
132+
# after we decide to remove ADVICE_DEFAULT_BRANCH_NAME
130133
if test -z "$WITH_BREAKING_CHANGES"
131134
then
132-
# Explicitly set the default branch name for testing, to avoid the
133-
# transitory "git init" warning under --verbose.
134135
: ${GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME:=master}
135-
export GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME
136+
else
137+
: ${GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME:=main}
136138
fi
139+
export GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME
140+
137141

138142
################################################################
139143
# It appears that people try to run tests without building...

0 commit comments

Comments
 (0)