跳至主要内容

管理多个帐户

如果您使用一个工作站为 GitHub.com 上多个帐户的项目做出贡献,则可以修改 Git 配置以简化贡献流程。

平台导航

关于多个帐户的管理

在某些情况下,您可能需要在 GitHub.com 上使用多个帐户。例如,您可能有一个用于开源贡献的个人帐户,您的雇主也可能在企业内为您创建和管理一个用户帐户。

您无法使用受管理的用户帐户为 GitHub.com 上的公共项目做出贡献,因此您必须使用个人帐户为这些资源做出贡献。有关更多信息,请参阅 GitHub Enterprise Cloud 文档中的“关于企业托管用户”。

如果您需要在 GitHub.com 上使用多个帐户,则可以保持登录状态并切换帐户。例如,在个人帐户和服务帐户之间切换。有关更多信息,请参阅“在帐户之间切换”。

如果您想使用一个工作站从两个帐户进行贡献,您可以通过使用多种协议访问存储库数据或按存储库使用凭据,使用 Git 简化贡献。

警告:当您使用一个工作站向两个单独的帐户进行贡献时,请务必小心。管理两个或更多个帐户可能会增加错误地向公众泄露内部代码的可能性。

如果您不需要使用托管用户帐户,GitHub 建议您使用一个个人帐户进行您在 GitHub.com 上的所有工作。使用单个个人帐户,您可以使用一个身份向个人、开源或专业项目组合进行贡献。其他人可以邀请该帐户向个人存储库和组织拥有的存储库进行贡献,并且该帐户可以成为多个组织或企业的成员。

使用 HTTPS 和 SSH 向两个帐户进行贡献

如果您从一个工作站使用两个帐户进行贡献,您可以使用不同的协议和凭据访问存储库。

Git 可以使用 HTTPS 或 SSH 协议访问和更新 GitHub.com 上存储库中的数据。您用于克隆存储库的协议决定了在您访问存储库时您的工作站将使用哪些凭据进行身份验证。使用这种帐户管理方法,您可以存储一个帐户的凭据以用于 HTTPS 连接,并上传一个 SSH 密钥到另一个帐户以用于 SSH 连接。

您可以在 GitHub 上找到用于克隆存储库的 HTTPS 或 SSH URL。有关更多信息,请参阅“克隆存储库”。

有关使用 SSH 访问 GitHub 上的存储库的更多信息,请参阅“使用 SSH 连接到 GitHub”。

使用 HTTPS 和个人访问令牌向多个帐户进行贡献

或者,如果您想对两个帐户都使用 HTTPS 协议,您可以通过配置 Git 为每个存储库存储不同的凭据,为每个帐户使用不同的个人访问令牌。

  1. 打开终端。

  2. 要确认您使用凭据管理器,请输入以下命令并注意输出。

    外壳
    git config --get credential.helper
    
  3. 如果输出确认您正在使用凭据管理器,请清除凭据管理器中存储的凭据。

    • 如果输出不包含凭据管理器名称,则表示未配置凭据管理器,您可以继续执行下一步。

    • 如果输出为 osxkeychain,则表示您正在使用 macOS 钥匙串。要清除凭据,请输入以下命令。

      外壳
      git credential-osxkeychain erase https://github.com
      
    • 如果输出为 manager(或在早期版本中为 manager-core),则表示您正在使用 Git 凭据管理器。要清除凭据,请运行以下命令。

      外壳
      echo "protocol=https\nhost=github.com" | git credential-manager erase
      
  4. 要将 Git 配置为缓存您在 GitHub 上访问的每个存储库的完整远程 URL 的凭据,请输入以下命令。

    外壳
    git config --global credential.https://github.com.useHttpPath true
    
  5. 对于您的每个帐户,请使用 repo 范围创建一个专用个人访问令牌(经典版)。或者,对于您的每个帐户以及您是其成员的每个组织,请创建一个精细化个人访问令牌,该令牌可以访问所需存储库,并且具有对存储库内容的读写权限。有关更多信息,请参阅“管理您的个人访问令牌”。

  6. 当您第一次使用 Git 克隆存储库或访问您已克隆的存储库中的数据时,Git 将请求凭据。提供对存储库具有访问权限的帐户的个人访问令牌。

    Git 将根据存储库的完整远程 URL 缓存个人访问令牌,您将能够使用正确的帐户访问和写入 GitHub.com 上的存储库数据。

  1. 打开 Git Bash。

  2. 要确认您使用凭据管理器,请输入以下命令并注意输出。

    外壳
    git config --get credential.helper
    
  3. 如果输出确认您正在使用凭据管理器,请清除凭据管理器中存储的凭据。

    • 如果输出不包含凭据管理器名称,则表示未配置凭据管理器,您可以继续执行下一步。
    • 如果输出为 manager(或在早期版本中为 manager-core),则表示您正在使用 Git 凭据管理器。要清除凭据,请运行以下命令。
    外壳
    echo "protocol=https`nhost=github.com" | git credential-manager erase
    
    • 如果输出为 wincred,则表示您正在使用 Windows 凭据管理器。要清除凭据,请输入以下命令。

      外壳
      cmdkey /delete:LegacyGeneric:target=git:https://github.com
      
  4. 要将 Git 配置为缓存您在 GitHub 上访问的每个存储库的完整远程 URL 的凭据,请输入以下命令。

    外壳
    git config --global credential.https://github.com.useHttpPath true
    
  5. 对于您的每个帐户,请使用 repo 范围创建一个专用个人访问令牌(经典版)。或者,对于您的每个帐户以及您是其成员的每个组织,请创建一个精细化个人访问令牌,该令牌可以访问所需存储库,并且具有对存储库内容的读写权限。有关更多信息,请参阅“管理您的个人访问令牌”。

  6. 当您第一次使用 Git 克隆存储库或访问您已克隆的存储库中的数据时,Git 将请求凭据。提供对存储库具有访问权限的帐户的个人访问令牌。

    Git 将根据存储库的完整远程 URL 缓存个人访问令牌,您将能够使用正确的帐户访问和写入 GitHub.com 上的存储库数据。

  1. 打开终端。

  2. 要确认您使用凭据管理器,请输入以下命令并注意输出。

    外壳
    git config --get credential.helper
    
  3. 如果输出确认您正在使用凭据管理器,请清除凭据管理器中存储的凭据。

    • 如果输出不包含凭据管理器名称,则表示未配置凭据管理器,您可以继续执行下一步。
    • 如果输出为 manager(或在早期版本中为 manager-core),则表示您正在使用 Git 凭据管理器。要清除凭据,请运行以下命令。
    外壳
    echo "protocol=https\nhost=github.com" | git credential-manager erase
    
  4. 要将 Git 配置为缓存您在 GitHub 上访问的每个存储库的完整远程 URL 的凭据,请输入以下命令。

    外壳
    git config --global credential.https://github.com.useHttpPath true
    
  5. 对于您的每个帐户,请使用 repo 范围创建一个专用个人访问令牌(经典版)。或者,对于您的每个帐户以及您是其成员的每个组织,请创建一个精细化个人访问令牌,该令牌可以访问所需存储库,并且具有对存储库内容的读写权限。有关更多信息,请参阅“管理您的个人访问令牌”。

  6. 当您第一次使用 Git 克隆存储库或访问您已克隆的存储库中的数据时,Git 将请求凭据。提供对存储库具有访问权限的帐户的个人访问令牌。

    Git 将根据存储库的完整远程 URL 缓存个人访问令牌,您将能够使用正确的帐户访问和写入 GitHub.com 上的存储库数据。

使用 SSH 和 GIT_SSH_COMMAND 为多个帐户做出贡献

如果您希望对两个帐户使用 SSH 协议,则可以为每个帐户使用不同的 SSH 密钥。有关使用 SSH 的更多信息,请参阅“使用 SSH 连接到 GitHub”。

要对克隆到工作站的不同存储库使用不同的 SSH 密钥,您必须为 Git 操作编写一个 shell 包装器函数。该函数应执行以下步骤。

  1. 使用诸如 git config --get remote.origin.url 的命令确定存储库的完整名称和所有者。
  2. 选择用于身份验证的正确 SSH 密钥。
  3. 相应地修改 GIT_SSH_COMMAND。有关 GIT_SSH_COMMAND 的更多信息,请参阅 Git 文档中的 环境变量

例如,以下命令将 GIT_SSH_COMMAND 环境变量设置为指定一个 SSH 命令,该命令使用位于 PATH/TO/KEY/FILE 的私钥文件在 GitHub.com 上对名为 OWNER/REPOSITORY 的存储库进行身份验证以进行克隆。

外壳
GIT_SSH_COMMAND='ssh -i PATH/TO/KEY/FILE -o IdentitiesOnly=yes' git clone [email protected]:OWNER/REPOSITORY