Azure DevOps Services |Azure DevOps Server 2022 - Azure DevOps Server 2019 |TFS 2018
默认分支是 Git 将在新克隆上签出的第一个分支。
此外,
拉取请求
默认面向此分支。
我们将演练更改默认分支的过程。
我们还将介绍在进行此更改时必须考虑和更新的其他事项。
最后,我们将介绍一个用于缓解转换的工具。
设置新的默认分支
可以使用分支,而不是
main
用于新更改或更改存储库中开发的主线。 若要更改新存储库的默认分支名称,请参阅
“所有存储库”设置和策略
。
若要更改存储库的默认分支以合并新的拉取请求,至少需要两个分支。 如果只有一个分支,则它已是默认值。 必须创建第二个分支才能更改默认值。
此过程可能需要
设置 Git 存储库权限
。
在
项目存储库
下,选择
“分支
”。
在
“分支
”页上,选择所需的新默认分支旁边的
“更多”选项
,然后选择“
设置为默认分支
”。
设置新的默认分支后,可以根据需要删除以前的默认值。
Git 2.28
添加了选择初始分支名称的功能。
同时,Azure Repos、GitHub 和其他 Git 托管提供商添加了选择其他初始分支名称的功能。
以前,默认分支几乎始终命名
master
。
最受欢迎的替代名称是
main
。
不太常见的选项包括
trunk
和
development
。
如果没有你正在使用的工具或团队的任何限制,则任何有效的分支名称都将有效。
更新其他系统
更改为其他默认分支时,工作流的其他部分可能会受到影响。
规划更改时,需要考虑到这些部分。
更新所有管道的
CI 触发器
。
可以在 Web 中编辑设计器管道。
可以在各自的存储库中编辑 YAML 管道。
外部拉取请求
将每个打开的拉取请求重定向
到新的默认分支。
存储库的新克隆将获取新的默认分支。
切换后,具有现有克隆的每个人都应运行
git remote set-head origin -a
(替换为
origin
其远程的名称(如果是其他) 更新远程默认分支视图)。
未来的新分支应基于新的默认值。
需要更新指向Azure Repos中文件的某些书签、文档和其他非代码文件。
文件或目录的分支名称可以显示在 URL 中。
例如,
&version=GBmybranchname
如果 URL 包含查询字符串
version
,则应更新该 URL。
幸运的是,大多数指向默认分支的链接没有段
version
,可以按原样保留。
此外,删除旧默认分支后,尝试导航到该分支时,仍会转到新的默认值。
Git 存储库只能有一个默认分支。
但是,一段时间后,可以在旧默认值和新默认值之间设置即席镜像。
这样一来,如果最终用户继续推送到旧默认值,则他们不需要恢复其末尾的工作。
我们将使用
Azure Pipelines
设置此临时镜像。
本部分使用与
Microsoft 的观点
不一致的语言。
具体而言,这个词
master
出现在几个与 Git 中使用方式一致的几个位置。
本主题的目的是说明如何切换到更具包容性的语言,例如
main
。
避免提及
master
这一切将使方向更加难以理解。
这些说明不是愚蠢的,存储库设置可能需要其他更改,例如松动权限和策略。
如果在运行此管道之前更新旧分支和新默认分支,则管道将无法镜像更改。
有人必须手动将旧的默认分支
合并
到新的默认分支中,才能使其再次自动运行。
对于所有现有的 CI 版本,请更新它们以针对新的默认分支而不是旧分支
触发
。
授予生成标识
“参与
”对存储库的权限。 导航到存储库
(存储库)
>
权限
的项目
设置
>
存储库
>。 最多可以有两个标识,一个标识用于项目集合生成服务,另一个标识用于项目生成服务。 确保“参与”权限显示
“允许
”。
如果新的默认分支具有分支策略,则还会在推送权限时向生成标识授予
“绕过”策略
。
此权限是一种安全风险,因为恶意用户可能会创建管道,以便将代码偷偷进入项目中的存储库。
不再需要镜像时,
请务必
删除此权限。
将新文件
mirror.yml
添加到新的默认分支中的存储库。
在此示例中,我们假定旧的默认分支是
master
新
main
分支。
如果分支名称不同,
git push
请更新触发分支和行。
trigger:
branches:
include:
- master
- main
pool: { vmImage: ubuntu-latest }
steps:
- checkout: self
persistCredentials: true
- script: |
git checkout $(Build.SourceBranchName)
git push origin HEAD:master HEAD:main
displayName: Mirror old and new default branches
创建新的管道,在向导中选择“Azure Repos Git”和“现有 Azure Pipelines YAML 文件”。
mirror.yml
选择在上一步中添加的文件。
保存并运行管道。
每次推送到或推送main
时,此管道都会运行master
。
只要新提交未同时到达两个分支,它就会保持同步。
如果管道开始失败,并显示错误消息,如“汇报 由于推送的分支提示位于其远程后面”,则有人必须手动将旧分支合并到新分支中。
克隆存储库并将其 cd
目录。
如果新的默认分支) ,请查看具有 git checkout main
(main
的新默认分支。
创建新的分支以将两个分支与 git checkout -b integrate
集成。
如果master
旧默认分支) ,请将旧默认分支与 (合并git merge master
。
推送新分支,然后将拉取请求打开并完成到新的默认分支中。
然后,镜像管道应负责将合并提交镜像回旧默认值。