如何合并两个GitHub账户

82

我有两个 GitHub 账户,其中一个是很久以前在我的工作中创建的,用户名与我工作的公司相关。

我还有另一个账户是我个人的 GitHub 账户,我不能停止使用。

我能合并这两个账户,这样我只需使用其中一个账户吗?


4
你需要删除一个账户并将所有代码库转移到另一个账户中。https://help.github.com/articles/merging-multiple-user-accounts/ - Ismail Farooq
3
可以将所有权转移到另一个帐户,前往“设置”>>“转移所有权”。 - Snopzer
4个回答

46

3
嗨,@RodrigoCurbelo 如果这个回答解决了你的问题,请考虑通过点击复选标记来接受它。这表明您已经找到了解决方案,并为回答者和自己赢得了声誉。当然,这并不是义务性的。 - Snopzer
但是,如果我将我的工作帐户中所有权转移到个人帐户,所有日志(如提交、拉取请求、问题等)都会归属于我的个人帐户吗?我是否会自动获得公司的私人组织访问权限?我会失去什么? - Rodrigo Curbelo
3
我的公司账户里我可以访问的代码仓库不是由我创建的,我只是其中的协作者……那么我在个人账户中会得到完全相同的权限吗? - Rodrigo Curbelo
1
嗨,MohammadFarad - 我不知道你是否仍然在线并检查SO - 但如果是这样的话,我相信现在(五年后,即2021年!)这个被接受的答案已经变得误导人了,考虑到@ScottMathson详细回答了你可以做什么 - 几乎你想要的一切!- 下面。我想知道你是否有时间添加链接 - 如果你同意我的话,当然!非常感谢。 - MikeBeaton

35

以下是更新的答案(适用于2019年)。

幸运的是,这是一个相对快速的过程,需要1)转移存储库所有权2)管理(添加/删除/更改)帐户电子邮件地址3)将大部分提交历史记录保留/转移到个人资料的贡献图中

转移存储库所有权只需要几个步骤。

  • 从Repo > 设置页面 > 选项 > 滚动到底部,在“危险区域”内查找红色“转移”按钮
  • 填写必填字段,输入要确认的存储库名称并输入新所有者的 GH 用户名
  • 新所有者会收到一封包含授权令牌的电子邮件,该令牌在24小时后过期。请务必检查您要转移到的帐户的电子邮件,并按照链接完成任何存储库转移

帐户之间的存储库转移包括所有问题、拉取请求、分支、星标,同时设置自动重定向以进行 git 和 http。不过,一旦转移完成,请记得更新您的远程起点 URL:git remote set-url origin new_url

Git提交历史记录、SAML和其他内容与您在GitHub和远程、本地设置中注册的电子邮件相关联。如果想将提交历史记录保存/转移到贡献图中,需要在要合并的用户帐户上添加原始的、作者的电子邮件地址/验证

  • 从GH仪表板>单击您的个人资料照片下拉菜单>设置页面
  • 点击左侧边栏中的电子邮件>添加电子邮件地址字段>添加新的电子邮件
  • 检查您刚刚添加的电子邮件地址的收件箱,并单击包含的链接。您应该会看到一条电子邮件验证确认横幅,显示您的GitHub仪表板。

关于大多数历史转移的先前说明是指PR和问题,它们属于这种“灰色领域”的历史记录,当合并帐户时不会转移。

在将电子邮件添加到GH用户帐户并进行验证后,大多数提交历史记录将会转移。请允许GitHub花费一些时间来传播历史记录和贡献信息。

你删除帐户后,与原始拉取请求和问题历史记录相关的提交将丢失。这些 "会被归属给我们的“Ghost”用户,尽管这些问题/PR本身不会受到影响。”(来自GH支持)。如果您想了解更多信息,我撰写了一篇快速博客文章,介绍如何转移存储库所有权、添加电子邮件等 - 如何合并/组合两个(或多个)GitHub用户帐户
GitHub确实建议使用一个用户帐户来管理个人和专业(工作)存储库(来源),请务必考虑这样做!
管理多个用户帐户可能很麻烦,但有方法可以简化多个帐户的工作流程,所以如果您要保留多个帐户,请查看如何使用SSH密钥在一台计算机上管理多个GH帐户

2
你应该明确表明你发布的链接是你自己的。 - Jean-François Fabre
1
试图让这一点显而易见,@Jean-FrançoisFabre "如果你想阅读更多内容,我写了一篇快速的博客文章,介绍了转移仓库所有权、添加电子邮件等步骤和视觉效果...". 谢谢您的反馈,不过我是新来的贡献者! :) - Scott Mathson
1
好的。 - Jean-François Fabre
1
@ScottMathson 我的 GitHub 工作账户在一个由公司拥有的代码库中有提交记录。我能把这些提交记录的历史转移到我的个人账户吗? - Nithin
1
当我尝试添加第二个账号的电子邮件时,出现“电子邮件已被使用”的提示。您有什么想法可能是我的问题吗? - shady2020
显示剩余3条评论

10

虽然GitHub概述了一个有限的"合并多个用户帐户"过程,这也在之前的答案中提到过,但它并不是一个完整的解决方案。它无法解决第三方存储库贡献中的所有权问题。

GitHub将显示来自已删除用户(即您根据GitHub的帐户合并建议摆脱的帐户)的评论作为“幽灵”用户的评论 - 但不会将它们归因于幸存的帐户。在此处查看更多详细信息:

https://help.github.com/articles/deleting-your-user-account/

因此,实际上截至2016年11月,没有一般方法可以完全合并一个帐户的所有贡献到另一个帐户。


2
接受的答案已经不再完全正确了,因为“合并”不存在,并且还假定您拥有存储库。然而,如果您拥有工作帐户,并希望将其合并到个人帐户中,以便跟踪您的私有提交,则可以这样操作。 - mushcraft

3

GitHub提供了一个方便的命令行工具:hub,可以在https://hub.github.com找到。

我写了一个例子,将您所有组织中的所有存储库移动到my_new_organisation_name

#!/usr/bin/env bash

orgs="$(hub api '/user/orgs' | jq -r '.[] | .login')";
repos="$(for org in $orgs; do hub api '/orgs/'"$org"'/repos' | jq -r '.[] | .name';
         done)"

for org in $orgs; do
    for repo in $repos; do
        ( hub api '/repos/'"$org"'/'"$repo"'/transfer'
                  -F 'new_owner'='my_new_organisation_name' | jq . ) &
    done
done

针对用户而非组织,将my_new_organisation_name设置为替代用户名,移除外循环,并使用以下代码替换repos=行:
repos="$(hub api /users/SamuelMarks/repos | jq -r '.[] | .name')"

编辑:如果您喜欢GUI,可以使用这个GUI。更多信息请参见https://dev59.com/ArHma4cB1Zd3GeqPN5l8#54549899


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接