如何使用默认分支名称而不是“ master
”创建Git存储库?
您将使用Git 2.28(2020年第3季度):现有存储库中主分支的名称以及新创建的存储库中第一个分支的默认名称是可配置的,这样我们最终就可以摆脱硬编码的“ master
'。
并提醒2020年8月从GitHub:
2020年10月1日,如果尚未更改用户,组织或企业的新存储库的默认分支,它将自动从更改master
为main
。
您可以随时选择退出此更改:
- 对于用户,请访问https://github.com/settings/repositories页面
- 对于组织所有者,在
https://github.com/organizations/YOUR-ORGANIZATION/settings/repository-defaults
页面上
- 对于企业管理员,在
https://github.com/enterprises/YOUR-ENTERPRISE/settings/member_privileges
页面上
这项更改是GitHub为支持希望重命名其默认分支的项目和维护人员所做的众多更改之一。
要了解有关我们正在进行的更改的更多信息,请参见github / renaming。
但是,回到自己的Git(2.28,Q3 2020)见提交508fd8e通过(2020年6月29日)ĐoànTRAN聪DANH( )sgn
。
请参阅Johannes Schindelin()的提交0068f21,提交a471214,提交0cc1b47,提交32ba12d,提交6069ecc,提交f0a96e8,提交4d04658(2020年6月24日)和489947c(2020年6月23日)。
参见Don Goodman-Wilson()提交的8747ebb(2020年6月24日)。(由Junio C Hamano合并--在dscho
DEGoodmanWilson
gitster
提交11cbda2,2020年7月6日)
init
:允许为新存储库指定初始分支名称
签字人:约翰内斯·辛德尔林
越来越多的项目和公司希望更改其存储库的主要分支名称(有关此背景,请参见例如MislavMarohnić的推文)。
要更改新存储库的分支名称,当前唯一自动执行的方法是复制Git的所有模板目录,然后将所需的默认分支名称硬编码到.git/HEAD
文件中,然后配置init.templateDir
为指向那些复制的模板文件。
为了减少此过程的麻烦,让我们介绍一个新的选项:--initial-branch=<branch-name>
。
git init --initial-branch=hello myLocalRepo
# or
git config --global init.defaultBranch hello
git init myLocalRepo
和:
init
:允许通过配置为初始分支名称设置默认值
帮助人:Johannes Schindelin
帮助人:Derrick Stolee
签名人:Don Goodman-Wilson
我们只是引入了命令行选项,--initial-branch=<branch-name>
以允许使用与硬编码分支不同的初始分支来初始化新存储库。
为了允许用户更永久地覆盖初始分支名称(即,不必为每次git init
调用手动指定名称),让我们介绍一下init.defaultBranch
config设置。
注意:关于commit提交消息的commit 489947c已在Git 2.29中恢复,请参见“如何自定义git的合并提交消息? ”。
该init.defaultBranch
设置保持不变。
这会影响子模块:
submodule
:由于缺少遥控器而回到遥控器的HEAD。
提出者:Philippe Blain
签署人:Johannes Schindelin
如果remote.<name>.branch
没有配置,git submodule update
目前回退到使用该分支名称master
。
但是,一个更好的主意是使用remote HEAD
:在运行合理最新Git版本的所有Git服务器上,symrefHEAD
指向main分支。
注意:t7419演示了可能存在用例,这些用例期望 git submodule update --remote
将子模块更新到远程master
分支,即使远程HEAD
指向另一个分支。
可以说,此修补程序使行为更直观,但是极有可能在晦涩的设置中导致性能下降。
即使这样,也可以在没有更长过渡期的情况下解决此问题,这是可以的:
- 该
git submodule update --remote
命令并不是很常见。
- 运行此命令时,当前Git的行为会造成混乱,除非远程存储库的当前分支是
master
(在这种情况下,建议的行为与旧行为匹配)。
- 如果用户由于更改的行为而遇到退步,则此修复实际上是微不足道的:设置
submodule.<name>.branch
为master
将会恢复旧的行为。
请注意,在Git 2.29(2020年第四季度)中,测试contrib/
已根据的最新更改进行了调整fmt-merge-msg
。
参见Emily Shaffer()提交的b87528c(2020年8月3日)。(通过合并JUNIOÇ滨野- -在提交83b8250 8月10日2020)nasamuffin
gitster
签名人:艾米莉·谢弗(Emily Shaffer)
这将还原提交508fd8e8baf3e18ee40b2cf0b8899188a8506d07。
在6e6029a8(fmt-merge-msg
:允许省略合并目标再次)我们回去的行为,其中对“合并master
”,默认情况下,不包括“ into 'master'
”在合并消息的结尾。不再需要此测试修复。
也:
使用Git 2.29(Q4 2020),更新测试以master
从其中删除单词' '。
请参阅Johannes Schindelin()的提交f33f2d3,提交b6211b8(2020年9月26日)和提交432f5e6,提交5a0c32b,提交659288c(2020年9月21日)。(通过合并JUNIOÇ滨野- -在提交58138d3,2020年10月5日)dscho
gitster
tests
:避免master
分支名称的变化
签字人:约翰内斯·辛德尔林
这个词master
有悠久的历史,不断提醒着种族不公。Git项目不希望这种情况永久存在,并且已经开始避免这种情况。
测试套件对默认分支以外的分支使用此名称的变体。除了t3200(我们在上一提交中刚刚解决过)之外,这些实例可以自动重命名,因为它们不需要测试脚本之外的任何更改,因此让我们这样做。
鉴于被触摸的分支与默认分支几乎没有关系(如果有的话),我们选择使用完全独立的命名方案:(topic_<number>
不可能topic-<number>
因为t5515使用test_oid
带有术语的机器,而机器内部使用了shell变量,其名称不能包含破折号)。
此技巧是通过以下(GNU)sed调用执行的:
$ sed -i 's/master\([a-z0-9]\)/topic_\1/g' t/t*.sh
而且,仍然使用Git 2.29:
参见Johannes Schindelin()提交的538228e,提交a15ad5d(2020年10月8日)。(通过合并JUNIOÇ滨野- -在提交62564ba,2020年10月8日)dscho
gitster
t1415
:避免main
用作参考名称
签字人:约翰内斯·辛德尔林
在一个贴片系列,这将改变后备准备init.defaultBranch
给main
,我们也不要使用main
作为参考的名字在这个测试脚本。
否则,想要抓住那些裁判的(男人)也会意外地抓住。git for-each-ref ... | grep main
refs/heads/main
由于有问题的ref是本地的工作树(例如,每个工作树都有自己的ref HEAD
),并且由于测试用例已经使用了名为“ second
”的辅助工作树,因此我们将名称“ first
”用于这些引用。
同时,调整当它们表示“工作树”时谈论“回购”的测试标题。