{"meta":{"title":"管理多个帐户","intro":"如果使用一个工作站参与多个帐户的项目，则可以修改 Git 配置以简化参与过程。","product":"帐户和个人资料","breadcrumbs":[{"href":"/zh/account-and-profile","title":"帐户和个人资料"},{"href":"/zh/account-and-profile/how-tos","title":"操作方法"},{"href":"/zh/account-and-profile/how-tos/account-management","title":"个人帐户管理"},{"href":"/zh/account-and-profile/how-tos/account-management/managing-multiple-accounts","title":"管理多个帐户"}],"documentType":"article"},"body":"# 管理多个帐户\n\n如果使用一个工作站参与多个帐户的项目，则可以修改 Git 配置以简化参与过程。\n\n## 使用 HTTPS 和 personal access token 参与多个帐户\n\n或者，如果要为这两个帐户都使用 HTTPS 协议，可以配置 Git 以便为每个存储库存储不同的凭据，从而为每个帐户使用不同的 personal access token。\n\n<div class=\"ghd-tool mac\">\n\n1. 打开终端。\n2. 若要确认凭据管理器的使用，请输入以下命令并记下输出。\n\n   ```shell copy\n   git config --get credential.helper\n   ```\n3. 如果输出确认在使用凭据管理器，请为凭据管理器清除存储的凭据。\n\n* 如果输出不包含凭据管理器的名称，则未配置凭据管理器，可以继续执行下一步。\n  * 如果输出为 `osxkeychain`，则在使用 macOS 密钥链。 若要清除凭据，你可以在命令行上使用凭据帮助程序：\n\n    ```shell\n    $ git credential-osxkeychain erase\n    host=github.com\n    protocol=https\n    > [Press Return]\n    >\n    ```\n\n  * 如果输出为 `manager`(在旧版本中为 `manager-core`），则你使用的是 Git 凭据管理器。 若要清除凭据，请运行以下命令。\n\n    ```shell copy\n    echo \"protocol=https\\nhost=github.com\" | git credential-manager erase\n    ```\n\n1. 若要将 Git 配置为缓存你在 GitHub 上访问的每个存储库的完整远程 URL 的凭据，请输入以下命令。\n\n   ```shell copy\n   git config --global credential.https://github.com.useHttpPath true\n   ```\n2. 为你的每个帐户，创建一个具有 `repo` 范围的专用 personal access token (classic)。 或者，对于每个帐户以及你所属的每个组织，请创建一个 fine-grained personal access token 可以访问所需存储库且对存储库内容具有读取和写入权限的存储库。 有关详细信息，请参阅“[管理个人访问令牌](/zh/authentication/keeping-your-account-and-data-secure/managing-your-personal-access-tokens)”。\n3. 首次使用 Git 克隆存储库或访问已克隆的存储库中的数据时，Git 会请求凭据。 为可访问存储库的帐户提供 personal access token。\n\n   Git 将根据存储库的完整远程 URL 缓存 personal access token，你将能够使用正确的帐户在 GitHub.com 上访问和写入存储库数据。\n\n</div>\n\n<div class=\"ghd-tool windows\">\n\n1. 打开 Git Bash。\n2. 若要确认凭据管理器的使用，请输入以下命令并记下输出。\n\n   ```shell copy\n   git config --get credential.helper\n   ```\n3. 如果输出确认在使用凭据管理器，请为凭据管理器清除存储的凭据。\n\n* 如果输出不包含凭据管理器的名称，则未配置凭据管理器，可以继续执行下一步。\n* 如果输出为 `manager`(在旧版本中为 `manager-core`），则你使用的是 Git 凭据管理器。 若要清除凭据，请运行以下命令。\n\n  ```shell copy\n  echo \"protocol=https`nhost=github.com\" | git credential-manager erase\n  ```\n\n  * 如果输出`wincred`，则使用 Windows 凭据管理器。 若要清除凭据，请输入以下命令。\n\n    ```shell copy\n    cmdkey /delete:LegacyGeneric:target=git:https://github.com\n    ```\n\n1. 若要将 Git 配置为缓存你在 GitHub 上访问的每个存储库的完整远程 URL 的凭据，请输入以下命令。\n\n   ```shell copy\n   git config --global credential.https://github.com.useHttpPath true\n   ```\n2. 为你的每个帐户，创建一个具有 `repo` 范围的专用 personal access token (classic)。 或者，对于每个帐户以及你所属的每个组织，请创建一个 fine-grained personal access token 可以访问所需存储库且对存储库内容具有读取和写入权限的存储库。 有关详细信息，请参阅“[管理个人访问令牌](/zh/authentication/keeping-your-account-and-data-secure/managing-your-personal-access-tokens)”。\n3. 首次使用 Git 克隆存储库或访问已克隆的存储库中的数据时，Git 会请求凭据。 为可访问存储库的帐户提供 personal access token。\n\n   Git 将根据存储库的完整远程 URL 缓存 personal access token，你将能够使用正确的帐户在 GitHub.com 上访问和写入存储库数据。\n\n</div>\n\n<div class=\"ghd-tool linux\">\n\n1. 打开终端。\n2. 若要确认凭据管理器的使用，请输入以下命令并记下输出。\n\n   ```shell copy\n   git config --get credential.helper\n   ```\n3. 如果输出确认在使用凭据管理器，请为凭据管理器清除存储的凭据。\n\n* 如果输出不包含凭据管理器的名称，则未配置凭据管理器，可以继续执行下一步。\n* 如果输出为 `manager`(在旧版本中为 `manager-core`），则你使用的是 Git 凭据管理器。 若要清除凭据，请运行以下命令。\n\n  ```shell copy\n  echo \"protocol=https\\nhost=github.com\" | git credential-manager erase\n  ```\n\n1. 若要将 Git 配置为缓存你在 GitHub 上访问的每个存储库的完整远程 URL 的凭据，请输入以下命令。\n\n   ```shell copy\n   git config --global credential.https://github.com.useHttpPath true\n   ```\n2. 为你的每个帐户，创建一个具有 `repo` 范围的专用 personal access token (classic)。 或者，对于每个帐户以及你所属的每个组织，请创建一个 fine-grained personal access token 可以访问所需存储库且对存储库内容具有读取和写入权限的存储库。 有关详细信息，请参阅“[管理个人访问令牌](/zh/authentication/keeping-your-account-and-data-secure/managing-your-personal-access-tokens)”。\n3. 首次使用 Git 克隆存储库或访问已克隆的存储库中的数据时，Git 会请求凭据。 为可访问存储库的帐户提供 personal access token。\n\n   Git 将根据存储库的完整远程 URL 缓存 personal access token，你将能够使用正确的帐户在 GitHub.com 上访问和写入存储库数据。\n\n</div>\n\n## 使用 SSH 和 `GIT_SSH_COMMAND` 参与多个帐户\n\n如果要为这两个帐户都使用 SSH 协议，则可以为每个帐户使用不同的 SSH 密钥。 有关使用 SSH 的详细信息，请参阅 [使用 SSH 连接到GitHub](/zh/authentication/connecting-to-github-with-ssh)。\n\n若要为克隆到工作站的不同存储库使用不同的 SSH 密钥，必须为 Git 操作编写 shell 包装器函数。 该函数应执行以下步骤。\n\n1. 使用命令（例如 `git config --get remote.origin.url`）确定存储库的全名及所有者。\n2. 选择用于身份验证的正确 SSH 密钥。\n3. 相应地修改 `GIT_SSH_COMMAND`。 有关 `GIT_SSH_COMMAND` 的详细信息，请参阅 Git 文档中的[环境变量](https://git-scm.com/docs/git#Documentation/git.txt-codeGITSSHCOMMANDcode)。\n\n例如，以下命令设置 `GIT_SSH_COMMAND` 环境变量以指定 SSH 命令，该命令使用 ***PATH/TO/KEY/FILE*** 处的私钥文件进行身份验证，以克隆 GitHub.com 上名为 OWNER/REPOSITORY 的存储库。\n\n```shell copy\nGIT_SSH_COMMAND='ssh -i PATH/TO/KEY/FILE -o IdentitiesOnly=yes' git clone git@github.com:OWNER/REPOSITORY\n```\n\n## 通过 SSH 和多个密钥为多个帐户做贡献\n\n如果你是 具有托管用户的企业 的成员，但也希望使用个人账户在企业之外进行协作，可以为每个账户使用不同的 SSH 密钥。 有关使用 SSH 的详细信息，请参阅 [使用 SSH 连接到GitHub](/zh/authentication/connecting-to-github-with-ssh)。\n\n> \\[!WARNING]\n> 不能使用同一个 SSH 密钥同时向 具有托管用户的组织 内部的存储库和企业外部的存储库贡献代码。\n\n1. 为你的具有托管用户的组织中的存储库创建一个新的 SSH 密钥。 请参阅“[生成新的 SSH 密钥并将其添加到 ssh-agent](/zh/authentication/connecting-to-github-with-ssh/generating-a-new-ssh-key-and-adding-it-to-the-ssh-agent#generating-a-new-ssh-key)”。 保存密钥时，请为它提供与现有密钥不同的文件名（例如，将 -emu 添加到建议的文件名称）。\n\n2. 将新的 SSH 密钥添加到你的 托管用户帐户。 请参阅“[将新的 SSH 密钥添加到GitHub帐户](/zh/authentication/connecting-to-github-with-ssh/adding-a-new-ssh-key-to-your-github-account#adding-a-new-ssh-key-to-your-account)”\n\n3. 将 SSH 配置文件 `~/.ssh/config` 配置为使用不同的密钥。 例如，如果你的个人 SSH 密钥是 `~/.ssh/id_ed25519`，而你的 具有托管用户的企业 SSH 密钥是 `~/.ssh/id_ed25519-emu`\n\n   ```text copy\n   Host github.com\n       IdentityFile ~/.ssh/id_ed25519\n       IdentitiesOnly yes\n\n   Host github-emu.com\n       Hostname github.com\n       IdentityFile ~/.ssh/id_ed25519-emu\n       IdentitiesOnly yes\n   ```\n\n   > \\[!NOTE]\n   > 该 `IdentitiesOnly` 行可确保如果 ssh-agent 加载了多个密钥，则 ssh 在连接时使用正确的密钥。\n\n4. 通过运行以下命令测试 SSH 配置，以使用与个人帐户关联的 SSH 密钥进行连接 - 有关详细信息，请参阅 [测试 SSH 连接](/zh/authentication/connecting-to-github-with-ssh/testing-your-ssh-connection)\n\n   ```shell copy\n   ssh -T git@github.com\n   ```\n\n   测试是否可以使用你的 GitHub SSH 密钥连接到 (具有托管用户的企业)\n\n   ```shell copy\n   ssh -T git@github-emu.com\n   ```\n\n5. 告诉 `git` 在 具有托管用户的组织 中下载或上传存储库时使用正确的密钥。\n   要列出你的 具有托管用户的企业 中的组织，1. 在 GitHub 的右上角，单击个人资料图片，然后单击“<svg version=\"1.1\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" class=\"octicon octicon-organization\" aria-label=\"organization\" role=\"img\"><path d=\"M1.75 16A1.75 1.75 0 0 1 0 14.25V1.75C0 .784.784 0 1.75 0h8.5C11.216 0 12 .784 12 1.75v12.5c0 .085-.006.168-.018.25h2.268a.25.25 0 0 0 .25-.25V8.285a.25.25 0 0 0-.111-.208l-1.055-.703a.749.749 0 1 1 .832-1.248l1.055.703c.487.325.779.871.779 1.456v5.965A1.75 1.75 0 0 1 14.25 16h-3.5a.766.766 0 0 1-.197-.026c-.099.017-.2.026-.303.026h-3a.75.75 0 0 1-.75-.75V14h-1v1.25a.75.75 0 0 1-.75.75Zm-.25-1.75c0 .138.112.25.25.25H4v-1.25a.75.75 0 0 1 .75-.75h2.5a.75.75 0 0 1 .75.75v1.25h2.25a.25.25 0 0 0 .25-.25V1.75a.25.25 0 0 0-.25-.25h-8.5a.25.25 0 0 0-.25.25ZM3.75 6h.5a.75.75 0 0 1 0 1.5h-.5a.75.75 0 0 1 0-1.5ZM3 3.75A.75.75 0 0 1 3.75 3h.5a.75.75 0 0 1 0 1.5h-.5A.75.75 0 0 1 3 3.75Zm4 3A.75.75 0 0 1 7.75 6h.5a.75.75 0 0 1 0 1.5h-.5A.75.75 0 0 1 7 6.75ZM7.75 3h.5a.75.75 0 0 1 0 1.5h-.5a.75.75 0 0 1 0-1.5ZM3 9.75A.75.75 0 0 1 3.75 9h.5a.75.75 0 0 1 0 1.5h-.5A.75.75 0 0 1 3 9.75ZM7.75 9h.5a.75.75 0 0 1 0 1.5h-.5a.75.75 0 0 1 0-1.5Z\"></path></svg> Your organizations”\\*\\*\\*\\*。\n\n   1. 对于列出的每个组织，请告知 `git` 使用 `github-emu.com` 主机。\n\n   例如，如果你的某个组织名为 `octocat-emu`，那么要让 `git` 在 `github-emu.com` 组织的存储库中使用主机 `octocat-emu`，请运行以下命令\n\n   ```shell copy\n   git config --global url.\"git@github-emu.com:octocat-emu/\".insteadOf \"git@github.com:octocat-emu/\"\n   ```\n\n现在，在 `octocat-emu` 组织中使用 SSH 克隆存储库时，`git` 将使用与您的 具有托管用户的企业 关联的 SSH 密钥，而不是您的个人密钥。\n\n## 后续步骤\n\n有关参考信息，请参阅 [个人帐户参考](/zh/account-and-profile/reference/personal-account-reference)。"}