Re: [PATCH 6/6] breaking-changes: switch default branch to main
- From
Junio C Hamano <gitster@pobox.com>
- Date
- Aug 27, 2025, 18:41 UTC
- Message-ID
- <xmqqplcgzjya.fsf@gitster.g>
- In-Reply-To
- <487d1a33130cb2fafadcf98da00a332a7408a0e8.1756308283.git.phillip.wood@dunelm.org.uk>
Phillip Wood <phillip.wood123@gmail.com> writes:
Show 13 quoted lines
> diff --git a/Documentation/BreakingChanges.adoc b/Documentation/BreakingChanges.adoc > index f8d2eba061c..93922299321 100644 > --- a/Documentation/BreakingChanges.adoc > +++ b/Documentation/BreakingChanges.adoc > @@ -165,6 +165,11 @@ A prerequisite for this change is that the ecosystem is ready to support the > "reftable" format. Most importantly, alternative implementations of Git like > JGit, libgit2 and Gitoxide need to support it. > > +* The default branch name will be `main`. We have been warning that the default > + name will change since 675704c74dd (init: provide useful advice about > + init.defaultBranch, 2020-12-11). The new name matches the default branch name > + used by many of the big git forges. > +
Good.
Show 18 quoted lines
> diff --git a/Documentation/git-init.adoc b/Documentation/git-init.adoc > index a0dffba665f..39d4db6bccb 100644 > --- a/Documentation/git-init.adoc > +++ b/Documentation/git-init.adoc > @@ -77,9 +77,15 @@ If this is a reinitialization, the repository will be moved to the specified pat > `-b <branch-name>`:: > `--initial-branch=<branch-name>`:: > Use _<branch-name>_ for the initial branch in the newly created > -repository. If not specified, fall back to the default name (currently > -`master`, but this is subject to change in the future; the name can be > -customized via the `init.defaultBranch` configuration variable). > +repository. If not specified, fall back to the default name > +ifndef::with-breaking-changes[] > +(currently `master`, but this will change to `main` when Git 3.0 is released). > +endif::with-breaking-changes[] > +ifdef::with-breaking-changes[] > +(`main`). > +endif::with-breaking-changes[]
Good. We might have to change it back to "(currently `main`)" again but I do not see the need to prepare for such a re-rename. As we do not have the "currently", we can say
... to the default name `main`.
without parentheses.
> +The default name can be customized via the `init.defaultBranch` configuration > +variable.
Show 28 quoted lines
> diff --git a/advice.c b/advice.c
> index e5f0ff84491..48c49ee4145 100644
> --- a/advice.c
> +++ b/advice.c
> @@ -51,7 +51,9 @@ static struct {
> [ADVICE_AM_WORK_DIR] = { "amWorkDir" },
> [ADVICE_CHECKOUT_AMBIGUOUS_REMOTE_BRANCH_NAME] = { "checkoutAmbiguousRemoteBranchName" },
> [ADVICE_COMMIT_BEFORE_MERGE] = { "commitBeforeMerge" },
> +#ifndef WITH_BREAKING_CHANGES
> [ADVICE_DEFAULT_BRANCH_NAME] = { "defaultBranchName" },
> +#endif /* WITH_BREAKING_CHANGES */
> [ADVICE_DETACHED_HEAD] = { "detachedHead" },
> [ADVICE_DIVERGING] = { "diverging" },
> [ADVICE_FETCH_SET_HEAD_WARN] = { "fetchRemoteHEADWarn" },
> diff --git a/advice.h b/advice.h
> index 727dcecf4a3..fc1dc872049 100644
> --- a/advice.h
> +++ b/advice.h
> @@ -18,7 +18,9 @@ enum advice_type {
> ADVICE_AM_WORK_DIR,
> ADVICE_CHECKOUT_AMBIGUOUS_REMOTE_BRANCH_NAME,
> ADVICE_COMMIT_BEFORE_MERGE,
> +#ifndef WITH_BREAKING_CHANGES
> ADVICE_DEFAULT_BRANCH_NAME,
> +#endif /* WITH_BREAKING_CHANGES */
> ADVICE_DETACHED_HEAD,
> ADVICE_DIVERGING,
> ADVICE_FETCH_SET_HEAD_WARN,Good.
Show 9 quoted lines
> diff --git a/ci/run-build-and-tests.sh b/ci/run-build-and-tests.sh > index 01823fd0f14..a21834043f3 100755 > --- a/ci/run-build-and-tests.sh > +++ b/ci/run-build-and-tests.sh > @@ -9,7 +9,6 @@ run_tests=t > > case "$jobname" in > linux-breaking-changes) > - export GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME=main
Questionable.
Show 24 quoted lines
> diff --git a/refs.c b/refs.c > index 4ff55cf24f6..e73f63ff6b8 100644 > --- a/refs.c > +++ b/refs.c > @@ -627,10 +627,12 @@ void expand_ref_prefix(struct strvec *prefixes, const char *prefix) > strvec_pushf(prefixes, *p, len, prefix); > } > > +#ifndef WITH_BREAKING_CHANGES > 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" > +"will change to \"main\" in Git 3.0. To configure the initial branch name\n" > +"to use in all of your new repositories, which will suppress this warning,\n" > +"call:\n" > "\n" > "\tgit config --global init.defaultBranch <name>\n" > "\n" > @@ -639,24 +641,32 @@ static const char default_branch_name_advice[] = N_( > "\n" > "\tgit branch -m <name>\n" > ); > +#endif /* WITH_BREAKING_CHANGES */
Good.
Show 12 quoted lines
> char *repo_default_branch_name(struct repository *r, int quiet)
> {
> const char *config_key = "init.defaultbranch";
> const char *config_display_key = "init.defaultBranch";
> char *ret = NULL, *full_ref;
> +#ifndef WITH_BREAKING_CHANGES
> const char *env = getenv("GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME");
>
> if (env && *env)
> ret = xstrdup(env);
> - else if (repo_config_get_string(r, config_key, &ret) < 0)
> +#endif /* WITH_BREAKING_CHANGES */Questionable.
Show 13 quoted lines
> + if (!ret && repo_config_get_string(r, config_key, &ret) < 0)
> die(_("could not retrieve `%s`"), config_display_key);
>
> if (!ret) {
> +#ifdef WITH_BREAKING_CHANGES
> + ret = xstrdup("main");
> + (void) quiet; /* Silence -Wunused-parameter */
> +#else
> ret = xstrdup("master");
> if (!quiet)
> advise_if_enabled(ADVICE_DEFAULT_BRANCH_NAME,
> _(default_branch_name_advice), ret);
> +#endif /* WITH_BREAKING_CHANGES */Very good.
Thanks.