git的默认分支
背景
自己的gitlab版本一直都比较低,许多项目默认分支是master.
本以为升级就行,结果看到了有些项目是main.
于是准备搞清楚.
一些知识
git的客户端与服务器,使用不同概念的 default branch
.
本地git:
- 新建项目时的第一个分支名.
- 其余时间,分支与分支之间没有谁更优先显示的说法.
git服务器:
- 打开页面显示时的第一个分支
- 客户端在clone时若不指定参数,则创建与该分支同名的本地分支.
克隆时的默认行为
- 创建了对远程所有分支时的追踪(
git branch --all
时显示许多remotes/origin/xxx
) - 只根据服务器端的设置,创建唯一的一个本地分支.
自定义的克隆
- 使用
--branch <name>
来指定创建哪一个本地分支 - 使用
--single-branch
要求git只追踪一个远程分支
本地的默认分支
全局配置中 init.defaultBranch
负责管理默认的第一个分支名.
如果有特别的需要,可以使用命令行参数覆盖默认配置
1 | git init --initial-branch=main |
甚至在创建第一个分支之后还能重命名分支
1 | git branch -m <new-name> |
服务器端的默认分支
空项目
服务器端创建的项目,以第一个分支作为默认分支.
在第一个分支出现之前,没有默认分支.
通常收到第一个分支的方式有两种
-
在服务器上就初始化一个Readme文件,此时会按照instance级别的配置确定分支名.
该选项名为default initial branch name
, 需要使用administer在如下位置配置1
Admin Area > Settings > Repository > Default initial branch name
-
在本地clone后将第一个分支传到服务器上
- clone时由于没有分支,将按照客户端的设置,checkout出第一个本地分支
- git push时如果与服务器端
default initial branch name
不一致,可能需要使用git push origin HEAD
已有内容的项目
只要有一个以上的分支,就能够配置项目的默认分支
1 | Settings > Repository > Default Branch |
唯一的本地分支改名
本地将仅有的一个分支改名,再次推送到远程的同名分支后,远程将会有两个分支.
本地可以强行checkout出改名前的分支,不过对改名后的分支的修改,已经不会影响改名前的分支了.