【发布时间】:2022-06-12 16:57:36
【问题描述】:
我是一个托管在 github/gitlab 上的项目的维护者,并且有许多贡献者。我想从使用master 作为默认分支迁移到main。我如何做到这一点而不搞砸?
我已经阅读了一些关于该主题的博客文章,但更希望在 StackOverflow 上进行讨论,在那里 cmets 可能会指出一个人可能会忽略的问题。
【问题讨论】:
我是一个托管在 github/gitlab 上的项目的维护者,并且有许多贡献者。我想从使用master 作为默认分支迁移到main。我如何做到这一点而不搞砸?
我已经阅读了一些关于该主题的博客文章,但更希望在 StackOverflow 上进行讨论,在那里 cmets 可能会指出一个人可能会忽略的问题。
【问题讨论】:
Github 提供了迁移选项,因此很简单。但是,即使使用像 gitlab 这样的任何其他服务(还没有),只要您执行正确的步骤,它还是相对简单的,至少从技术角度来看是这样。
无论哪种方式,除非您的项目非常小,否则最大的麻烦肯定是让您的所有贡献者正确地对正在进行的工作进行修复。
Github
在您的项目页面上,导航到settings,然后在“默认分支”部分中,按编辑按钮并将其从master 更改为main。
Gitlab,也就是手动迁移
我假设您的遥控器被称为 origin - 如果它被称为不同的名称,请在所有命令中相应地将 origin 替换为该名称。
master 重命名为main,并将其推送到上游:git fetch origin
git branch --move master main
git push --set-upstream origin main
告诉您的上游 main 是新的默认值:
settings/repository,“默认分支”部分,选择main,然后按“保存更改”。然后,在同一页面上,转到“受保护的分支”部分,保护main 并取消保护master,然后按“保存更改”。删除上游的master - 不是绝对必要的,但确实可以减少混淆:
git push origin --delete master
master 的打开的合并/拉取请求迁移到main,而不是:
master”。将下拉菜单从 master 更改为 main。git fetch origin --prune && git branch -m master main && git branch --set-upstream-to=origin/main main
据我所知,仅此而已 - &&s 是一个好主意,可以保护您,以防万一出现问题。
如果您在遵循此建议时遇到问题,请发表评论。 git 搞砸是很难解开的,所以我们至少能做的就是尽量不要重新发明the wheel。
【讨论】:
git checkout master; git branch -m main; git branch --set-upstream-to origin/main.
What your collaborators/colleagues need to do 部分下方的脚本,对吗?我假设它只删除了一个名称,因为新签出的main 拥有过去在master 上的完整历史记录。无论如何,如果您的版本只是实现相同目标的一种更安全的方式,那么我会很乐意使用您的版本。你能帮我确认一下吗?
git fetch origin --prune && git branch -m master main && git branch --set-upstream-to=origin/main main。无论他们在哪个分支上,这都应该有效;如果他们没有名为master 的分支,第二个命令将失败,第三个命令将不会运行,但它们会没事的。
--prune 的作用吗,它会摆脱origin/master,还是只是一个好主意?