如何将git项目从使用master作为默认分支迁移到main?

Arn*_*rne 8 git github gitlab

我是 github/gitlab 上托管的一个项目的维护者,该项目有许多贡献者。我想从 usingmaster作为默认分支迁移到main. 我该如何做到这一点而不搞砸?

我读过一些关于该主题的博客文章,但更喜欢在 StackOverflow 上进行讨论,其中评论可能会指出一个人可能忽略的问题。

Arn*_*rne 8

Github 提供了迁移选项,所以这很简单。但即使对于像 gitlab 这样还没有类似功能的任何其他服务,只要您执行正确的步骤,它就相对简单,至少从技术角度来看是这样。

无论哪种方式,除非您的项目非常小,否则最大的麻烦肯定是让所有贡献者正确地将修复应用于正在进行的工作。

你需要做什么

吉图布

在项目页面上,导航到settings,然后在“默认分支”部分中,按编辑按钮并将其从 更改mastermain

Gitlab,又名手动迁移

我假设您的远程/上游被调用origin- 如果它被称为不同的东西,请origin相应地在所有命令中替换为该名称。

  1. 将最新的重命名mastermain,并将其推送到上游:
git fetch origin
git branch --move master main
git push --set-upstream origin main
Run Code Online (Sandbox Code Playgroud)
  1. 告诉您的上游这main是新的默认值:

    • 导航到settings/repository“默认分支”部分,选择main并按“保存更改”。然后,在同一页面上,转到“受保护的分支”部分,然后保护main和取消保护master,然后按“保存更改”。
  2. master在上游删除- 不是绝对必要的,但确实减少了混乱:

git push origin --delete master
Run Code Online (Sandbox Code Playgroud)
  1. 将想要推送的开放合并/拉取请求master迁移到推送main
    • 在打开的合并请求中,按“编辑”。在顶部,应该显示“从 <branch_name> 到master”。将下拉列表从 更改mastermain

您的合作者/同事需要做什么

git fetch origin --prune && git branch -m master main && git branch --set-upstream-to=origin/main main
Run Code Online (Sandbox Code Playgroud)

据我所知,就是这样 - &&s 是一个好主意,可以在出现问题时保护您。


如果您按照此建议遇到问题,请发表评论。git这些乱七八糟的事情很难解开,所以我们至少能做的就是尽量不要重新发明轮子。

  • 我建议协作者运行 `git fetch origin --prune &amp;&amp; gitbranch -m master main &amp;&amp; gitbranch --set-upstream-to=origin/main main`。无论他们在哪个分支上,这都应该有效;如果他们没有名为“master”的分支,第二个命令将失败,第三个命令将无法运行,但他们会没事的。 (3认同)