Skip to main content

管理多个帐户

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

Platform navigation

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

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

  1. 打开终端。

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

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

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

      $ git credential-osxkeychain erase
      host=github.com
      protocol=https
      > [Press Return]
      >
      
    • 如果输出为 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 的存储库。

Shell
GIT_SSH_COMMAND='ssh -i PATH/TO/KEY/FILE -o IdentitiesOnly=yes' git clone git@github.com:OWNER/REPOSITORY

通过 SSH 和多个密钥为多个帐户做贡献

如果你是 具有托管用户的企业 的成员,但也希望使用个人账户在企业之外进行协作,可以为每个账户使用不同的 SSH 密钥。 有关使用 SSH 的详细信息,请参阅 使用 SSH 连接到GitHub

警告

不能使用同一个 SSH 密钥同时向 具有托管用户的组织 内部的存储库和企业外部的存储库贡献代码。

  1. 为你的具有托管用户的组织中的存储库创建一个新的 SSH 密钥。 请参阅“生成新的 SSH 密钥并将其添加到 ssh-agent”。 保存密钥时,请为它提供与现有密钥不同的文件名(例如,将 -emu 添加到建议的文件名称)。

  2. 将新的 SSH 密钥添加到你的 托管用户帐户。 请参阅“将新的 SSH 密钥添加到GitHub帐户

  3. 将 SSH 配置文件 ~/.ssh/config 配置为使用不同的密钥。 例如,如果你的个人 SSH 密钥是 ~/.ssh/id_ed25519,而你的 具有托管用户的企业 SSH 密钥是 ~/.ssh/id_ed25519-emu

    Text
    Host github.com
        IdentityFile ~/.ssh/id_ed25519
        IdentitiesOnly yes
    
    Host github-emu.com
        Hostname github.com
        IdentityFile ~/.ssh/id_ed25519-emu
        IdentitiesOnly yes
    

    注意

    IdentitiesOnly 行可确保如果 ssh-agent 加载了多个密钥,则 ssh 在连接时使用正确的密钥。

  4. 通过运行以下命令测试 SSH 配置,以使用与个人帐户关联的 SSH 密钥进行连接 - 有关详细信息,请参阅 测试 SSH 连接

    Shell
    ssh -T git@github.com
    

    测试是否可以使用你的 GitHub SSH 密钥连接到 (具有托管用户的企业)

    Shell
    ssh -T git@github-emu.com
    
  5. 告诉 git 在 具有托管用户的组织 中下载或上传存储库时使用正确的密钥。 要列出你的 具有托管用户的企业 中的组织,1. 在 GitHub 的右上角,单击个人资料图片,然后单击“ Your organizations”****。

    1. 对于列出的每个组织,请告知 git 使用 github-emu.com 主机。

    例如,如果你的某个组织名为 octocat-emu,那么要让 gitgithub-emu.com 组织的存储库中使用主机 octocat-emu,请运行以下命令

    Shell
    git config --global url."git@github-emu.com:octocat-emu/".insteadOf "git@github.com:octocat-emu/"
    

现在,在 octocat-emu 组织中使用 SSH 克隆存储库时,git 将使用与您的 具有托管用户的企业 关联的 SSH 密钥,而不是您的个人密钥。

后续步骤

有关参考信息,请参阅 个人帐户参考