Skip to main content

管理多个帐户

如果使用一个工作站参与 GitHub.com 上多个帐户的项目,则可以修改 Git 配置以简化参与过程。

Platform navigation

关于多个帐户的管理

在某些情况下,可能需要在 GitHub.com 上使用多个帐户。 例如,你可能具有用于开放源代码参与的个人帐户,雇主还可能在企业中为你创建和管理用户帐户。

不能使用 托管用户帐户 参与 GitHub.com 上的公共项目,因此必须使用个人帐户参与这些资源。 有关详细信息,请参阅 GitHub Enterprise Cloud 文档中的“关于 Enterprise Managed Users”。

如果要使用一个工作站同时从两个帐户进行参与,则可以混合使用协议访问存储库数据,或基于每个存储库使用凭据,从而简化通过 Git 进行的参与。

警告:使用一个工作站参与两个单独帐户时,请小心谨慎。 管理两个或多个帐户可能会增加错误地将内部代码泄露给公众的机会。

如果你不需要使用 托管用户帐户,则 GitHub 建议对 GitHub.com 上的所有工作使用一个个人帐户。 借助单个个人帐户,可以使用一个身份参与个人、开放源代码或专业项目的组合。 其他人可以邀请该帐户参与个人存储库和组织拥有的存储库,并且该帐户可以是多个组织或企业的成员。

使用 HTTPS 和 SSH 参与两个帐户

如果从一个工作站参与两个帐户,则可以通过对每个帐户使用不同的协议和凭据,来访问存储库。

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

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

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

使用 HTTPS 和 personal access token 参与多个帐户

或者,如果要为这两个帐户都使用 HTTPS 协议,可以配置 Git 以便为每个存储库存储不同的凭据,从而为每个帐户使用不同的 personal access token。

  1. 打开终端。

  2. 若要确认凭据管理器的使用,请输入以下命令并记下输出。

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

  • 如果输出不包含凭据管理器的名称,则未配置凭据管理器,可以继续执行下一步。
    • 如果输出为 osxkeychain,则在使用 macOS 密钥链。 若要清除凭据,请输入以下命令。

      Shell
      git credential-osxkeychain erase https://github.com
      
    • 如果输出为 manager(在旧版本中为 manager-core),则你使用的是 Git 凭据管理器。 若要清除凭据,请运行以下命令。

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

    Shell
    git config --global credential.https://github.com.useHttpPath true
    
  2. 请为每个帐户创建具有 repo 范围的专用 personal access token (classic)。 或者,对于每个帐户以及你所属的每个组织,请创建一个可访问所需存储库,并对存储库内容具有读取和写入权限的 fine-grained personal access token。有关详细信息,请参阅“管理个人访问令牌”。

  3. 首次使用 Git 克隆存储库或访问已克隆的存储库中的数据时,Git 会请求凭据。 为可访问存储库的帐户提供 personal access token。

    Git 将根据存储库的完整远程 URL 缓存 personal access token,你将能够使用正确的帐户在 GitHub.com 上访问和写入存储库数据。

  1. 打开 Git Bash。

  2. 若要确认凭据管理器的使用,请输入以下命令并记下输出。

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

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

  • 如果输出为 manager(在旧版本中为 manager-core),则你使用的是 Git 凭据管理器。 若要清除凭据,请运行以下命令。

    Shell
    echo "protocol=https`nhost=github.com" | git credential-manager erase
    
    • 如果输出为 wincred,则在使用 Windows 凭据管理器。 若要清除凭据,请输入以下命令。

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

    Shell
    git config --global credential.https://github.com.useHttpPath true
    
  2. 请为每个帐户创建具有 repo 范围的专用 personal access token (classic)。 或者,对于每个帐户以及你所属的每个组织,请创建一个可访问所需存储库,并对存储库内容具有读取和写入权限的 fine-grained personal access token。有关详细信息,请参阅“管理个人访问令牌”。

  3. 首次使用 Git 克隆存储库或访问已克隆的存储库中的数据时,Git 会请求凭据。 为可访问存储库的帐户提供 personal access token。

    Git 将根据存储库的完整远程 URL 缓存 personal access token,你将能够使用正确的帐户在 GitHub.com 上访问和写入存储库数据。

  1. 打开终端。

  2. 若要确认凭据管理器的使用,请输入以下命令并记下输出。

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

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

  • 如果输出为 manager(在旧版本中为 manager-core),则你使用的是 Git 凭据管理器。 若要清除凭据,请运行以下命令。

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

    Shell
    git config --global credential.https://github.com.useHttpPath true
    
  2. 请为每个帐户创建具有 repo 范围的专用 personal access token (classic)。 或者,对于每个帐户以及你所属的每个组织,请创建一个可访问所需存储库,并对存储库内容具有读取和写入权限的 fine-grained personal access token。有关详细信息,请参阅“管理个人访问令牌”。

  3. 首次使用 Git 克隆存储库或访问已克隆的存储库中的数据时,Git 会请求凭据。 为可访问存储库的帐户提供 personal access token。

    Git 将根据存储库的完整远程 URL 缓存 personal access token,你将能够使用正确的帐户在 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 git@github.com:OWNER/REPOSITORY