rename default branch from 'master' to 'main' in refs and test scripts
PATCH 1/1 rename default branch from 'master' to 'main' in refs and test scripts
From: Wing Huang <[email protected]>
modified: refs.c modified: remote.c modified: t/test-lib.sh
---
rename default branch from 'master' to 'main' in refs and test scripts
This patch updates Git's default branch name from 'master' to 'main' to align with modern naming conventions adopted across the industry.
The change affects only newly initialized repositories and maintains full backward compatibility through the existing init.defaultBranch configuration option.
Changes made:
* refs.c: Update hardcoded default branch name to 'main'
* remote.c: Update fallback branch name for remote operations
* t/test-lib.sh: Update test suite default to 'main'
Compatibility notes:
* Existing repositories are unaffected
* Users can still set init.defaultBranch=master if preferred
* The change only applies to new git init operations when no explicit branch name is configured
This follows the precedent set when init.defaultBranch configuration was introduced in Git 2.28, which already acknowledged the community's move toward more inclusive default branch names.
Published-As: https://github.com/gitgitgadget/git/releases/tag/pr-1961%2Fhuangsen365%2Fmaster-v1
Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-1961/huangsen365/master-v1
Pull-Request: https://github.com/gitgitgadget/git/pull/1961
refs.c | 2 +- remote.c | 2 +- t/test-lib.sh | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-)
refs.c +1 -1
@@ -653,7 +653,7 @@ char *repo_default_branch_name(struct repository *r, int quiet)die (_ ("could not retrieve `%s`" ), config_display_key);if (!ret) { - ret =xstrdup ("master" ); + ret =xstrdup ("main" );if (!quiet)advise_if_enabled (ADVICE_DEFAULT_BRANCH_NAME ,_ (default_branch_name_advice), ret);
remote.c +1 -1
@@ -2379,7 +2379,7 @@ struct ref *guess_remote_head(const struct ref *head,return copy_ref (r);/* Fall back to the hard-coded historical default */ - r =find_ref_by_name (refs,"refs/heads/master" ); + r =find_ref_by_name (refs,"refs/heads/main" );if (r &&oideq (&r->old_oid, &head->old_oid))return copy_ref (r); }
t/test-lib.sh +1 -1
@@ -129,7 +129,7 @@ fi # Explicitly set the default branch name for testing, to avoid the # transitory "git init" warning under --verbose. -: ${GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME:=master} +: ${GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME:=main} export GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME ################################################################
base-commit: 1fa68948c3d76328236cac73d2adf33c905bd8e3
Signature · 1 line
gitgitgadget
remote.c struct ref *guess_remote_head(const struct ref *head, · line 2382
Quoted 10 lines · Wing Huang via GitGitGadget
remote.c +1
-1@@ -2379,7 +2379,7 @@ struct ref *guess_remote_head(const struct ref *head,return copy_ref (r);/* Fall back to the hard-coded historical default */ - r =find_ref_by_name (refs,"refs/heads/master" ); + r =find_ref_by_name (refs,"refs/heads/main" );
That comment is no longer accurate.
Signature · 3 lines
Andreas Schwab, [email protected] GPG Key fingerprint = 7578 EB47 D4E5 4D69 2510 2552 DF73 E780 A9DA AEC1 "And now for something completely different."
Quoted 4 lines · Wing Huang via GitGitGadget
From: Wing Huang <[email protected]>
Signed-off-by Wing Huang <[email protected]>
Quoted 8 lines
modified: refs.c modified: remote.c modified: t/test-lib.sh---
rename default branch from 'master' to 'main' in refs and test scriptsThis patch updates Git's default branch name from 'master' to 'main' to align with modern naming conventions adopted across the industry.
Thank you for your interest in this. We're currently planning to change the default branch name when Git 3.0 is released as documented in Documentation/BreakingChanges.adoc. I've actually been working on some patches to do that at [1] which are almost ready to submit.
Quoted 1 line
*
refs.c: Update hardcoded default branch name to 'main'
Once we've done that we can also remove the advice about setting a default branch name.
Quoted 1 line
*
remote.c: Update fallback branch name for remote operations
I think we want to keep the fallback to "master" but check for "main" first. Otherwise we'll stop finding the default branch where the remote is still using master.
Quoted 1 line
*
t/test-lib.sh: Update test suite default to 'main'
GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME is intended to aid the transition from master to main, once the branch name is changed it can be removed (with a little bit of work).
Thanks
Phillip
[1] https://github.com/git/git/compare/master...phillipwood:git:initial-branch-is-main
Quoted 61 lines
Compatibility notes:
* Existing repositories are unaffected
* Users can still set init.defaultBranch=master if preferred
* The change only applies to new git init operations when no explicit branch name is configuredThis follows the precedent set when init.defaultBranch configuration was introduced in Git 2.28, which already acknowledged the community's move toward more inclusive default branch names.
Published-As: https://github.com/gitgitgadget/git/releases/tag/pr-1961%2Fhuangsen365%2Fmaster-v1
Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-1961/huangsen365/master-v1
Pull-Request: https://github.com/gitgitgadget/git/pull/1961refs.c | 2 +- remote.c | 2 +- t/test-lib.sh | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-)refs.c +1
-1@@ -653,7 +653,7 @@ char *repo_default_branch_name(struct repository *r, int quiet)die (_ ("could not retrieve `%s`" ), config_display_key);if (!ret) { - ret =xstrdup ("master" ); + ret =xstrdup ("main" );if (!quiet)advise_if_enabled (ADVICE_DEFAULT_BRANCH_NAME ,_ (default_branch_name_advice), ret);remote.c +1
-1@@ -2379,7 +2379,7 @@ struct ref *guess_remote_head(const struct ref *head,return copy_ref (r);/* Fall back to the hard-coded historical default */ - r =find_ref_by_name (refs,"refs/heads/master" ); + r =find_ref_by_name (refs,"refs/heads/main" );if (r &&oideq (&r->old_oid, &head->old_oid))return copy_ref (r); }t/test-lib.sh +1
-1@@ -129,7 +129,7 @@ fi # Explicitly set the default branch name for testing, to avoid the # transitory "git init" warning under --verbose. -: ${GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME:=master} +: ${GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME:=main} export GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME ################################################################base-commit:
1fa68948c3d76328236cac73d2adf33c905bd8e3
Quoted 5 lines · Phillip Wood
Quoted 1 line
*
remote.c: Update fallback branch name for remote operationsI think we want to keep the fallback to "master" but check for "main" first. Otherwise we'll stop finding the default branch where the remote is still using master.
I'm not sure we need to change anything there. Modern Git will generally report the name of the branch pointed to by HEAD back to the client (using either a symref capability in protocol v0 or the symref extension to the ls-refs list in v2). So the fallback would be needed only for very old servers, in which case "master" is probably a better guess.
IIRC, there are cases where v0 does not report the HEAD value when it points to an unborn branch (and while I'd expect most Git servers to always support v2 these days, sometimes the protocol upgrade fails due to things like ssh blocking the GIT_PROTOCOL variable). But I don't think that would affect the fallback code:
Quoted 7 lines
remote.c struct ref *guess_remote_head(const struct ref *head, · line 2383
Quoted 7 lines
remote.c +1
-1@@ -2379,7 +2379,7 @@ struct ref *guess_remote_head(const struct ref *head,return copy_ref (r);/* Fall back to the hard-coded historical default */ - r =find_ref_by_name (refs,"refs/heads/master" ); + r =find_ref_by_name (refs,"refs/heads/main" );if (r &&oideq (&r->old_oid, &head->old_oid))return copy_ref (r);
since it is only about looking for the matching branch name, and not the unborn case.
If we truly have an unborn HEAD on a very old server (with no protocol support), I think we just end up without checking anything out, which means HEAD would default to whatever the local client default is.
-Peff
Hi Peff
Quoted 14 lines · Jeff King
Quoted 5 lines · Phillip Wood
Quoted 1 line
*
remote.c: Update fallback branch name for remote operationsI think we want to keep the fallback to "master" but check for "main" first. Otherwise we'll stop finding the default branch where the remote is still using master.
I'm not sure we need to change anything there. Modern Git will generally report the name of the branch pointed to by HEAD back to the client (using either a symref capability in protocol v0 or the symref extension to the ls-refs list in v2). So the fallback would be needed only for very old servers, in which case "master" is probably a better guess.
Quoted 5 lines
IIRC, there are cases where v0 does not report the HEAD value when it points to an unborn branch (and while I'd expect most Git servers to always support v2 these days, sometimes the protocol upgrade fails due to things like ssh blocking the
GIT_PROTOCOLvariable). But I don't think that would affect the fallback code:
Thanks for clarifying that
Phillip
Quoted 11 lines
Quoted 7 lines
remote.c struct ref *guess_remote_head(const struct ref *head, · line 2383
Quoted 7 lines
remote.c +1
-1@@ -2379,7 +2379,7 @@ struct ref *guess_remote_head(const struct ref *head,return copy_ref (r);/* Fall back to the hard-coded historical default */ - r =find_ref_by_name (refs,"refs/heads/master" ); + r =find_ref_by_name (refs,"refs/heads/main" );if (r &&oideq (&r->old_oid, &head->old_oid))return copy_ref (r);since it is only about looking for the matching branch name, and not the unborn case.
Quoted 3 lines
If we truly have an unborn HEAD on a very old server (with no protocol support), I think we just end up without checking anything out, which means HEAD would default to whatever the local client default is.
I just tried cloning a repository with an unborn head and the clone >
Quoted 2 lines
-Peff
Quoted 8 lines · Phillip Wood
Quoted 5 lines · Wing Huang via GitGitGadget
From: Wing Huang <[email protected]>
rename default branch from 'master' to 'main' in refs and test scripts This patch updates Git's default branch name from 'master' to 'main' to align with modern naming conventions adopted across the industry.
Thank you for your interest in this. We're currently planning to change the default branch name when Git 3.0 is released as documented in
Documentation/BreakingChanges.adoc.
Oh, sorry it seems I imagined that. I've just checked and there is no entry in that document about the default branch name. I do think that the 3.0 release would be a good time to change the default branch name though.
Thanks
Phillip