Hi Junio, On Wed, 10 Jun 2020, Junio C Hamano wrote: > "Johannes Schindelin via GitGitGadget" <gitgitgadget@xxxxxxxxx> > writes: > > > A growing number of open source projects aims to avoid the branch name > > master due to its negative connotation. See [1] for an existing discussion > > on this. The links [2], [3], and [4] describe community-driven ways for > > users to rename their default branches or use template edits to set a new > > default branch name. > > I scanned the series quickly and the patches seem to cover all the > places I was aware of that has the hard-coded knowledge of the > default branch name being 'master'. Looking good. Thanks! > > This series DOES NOT change the default automatically, but only > > provides an opt-in mechanism for interested users. It also presents a > > way forward for such a transition, if and when we decide to do so. > > Specifically, the new GIT_TEST_DEFAULT_BRANCH_NAME environment > > variable could be used to update test scripts on an individual basis > > instead of all-at-once. > > Yes. I've been thinking about a way that does not hurt workflows > used in existing projects while allowing a "git init" that is run to > create a new repository by a new user who does not have any special > customization in ~/.gitconfig to use the branch name that replaces > the 'master' (I do not mind changing away from 'master', but I am > not yet convinced it should be 'main', by the way---the actual > choice of the final name does not matter at this point of the design > of backward compatibility plan). > > I think "git init" that is creating a new repository (iow, do not do > anything when reinitializing an existing repostiory) can > > - look at config.defaultBranchName in /etc/gitconfig or > ~/.gitconfig before initializing the per-repository config in > $GIT_DIR/config it just created (or it is about to create). > > - if there is no config.defaultBranchName configured, then set the > per-repository configuration to 'main' in the per-repository > configuration. Otherwise do not do anything. > > And then we make sure Don's git_default_branch_name() works this > way: > > (0) if there is config.defaultBranchName in relevant config file > (i.e. /etc/gitconfig, ~/.gitconfig or per-repo config), use the > specified name. > > (1) otherwise use 'master' (not 'main'). > > That way, an existing repository will keep using 'master' unless the > user shows the preference (and accepts responsibilities for possible > fallouts) in ~/.gitconfig or the repository's .git/config, while a > new repository created by a user who does not show any particular > preference will use 'main'. I read this (way too late) last night and slept over it. Together with your comment on the `fmt-merge-msg` patch, I think you are really on to something: we need _two_ config settings, as there are two distinct concepts at play here: - One setting to specify the default branch name for newly-initialized repositories (such as `git init`, unless it re-initializes, and `git clone` when the cloned repository does not yet contain any branches). This should probably be called `init.defaultBranchName` (even if `git clone` picks it up, too), and be overrideable by `GIT_TEST_DEFAULT_BRANCH_NAME`. - And another one, to define the default branch name for the _current_ repository. This setting would be configured implicitly upon `git init` and `git clone`. For repositories where it is not set, we would assume `master` for backwards-compatibility. Technically, this should probably not even be a config option because it is _strictly_ per-repo. But maybe it is not _so_ much per-repo: if I want to rename all my main branches in all of my local repositories, I might opt to configure this in `~/.gitconfig`. Maybe a good name for this would be `repo.mainBranch` (and it would contain the full ref name, e.g. `refs/heads/main`, not just `main`). And then `git fmt-merge-msg` (and your proposed `git var` addition, which I like a lot, maybe `git var mainBranch`?) will pick up the latter. That way, existing repositories would not be affected by `GIT_TEST_DEFAULT_BRANCH_NAME` or `init.defaultBranchName` at all. Only new repositories would pick it up. Does that sound like a plan? Ciao, Dscho