使用 HTTPS 和 personal access token 参与多个帐户
或者,如果要为这两个帐户都使用 HTTPS 协议,可以配置 Git 以便为每个存储库存储不同的凭据,从而为每个帐户使用不同的 personal access token。
-
打开终端。
-
若要确认凭据管理器的使用,请输入以下命令并记下输出。
Shell git config --get credential.helper
git config --get credential.helper -
如果输出确认在使用凭据管理器,请为凭据管理器清除存储的凭据。
- 如果输出不包含凭据管理器的名称,则未配置凭据管理器,可以继续执行下一步。
-
如果输出为
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
echo "protocol=https\nhost=github.com" | git credential-manager erase
-
-
若要将 Git 配置为缓存你在 GitHub 上访问的每个存储库的完整远程 URL 的凭据,请输入以下命令。
Shell git config --global credential.https://github.com.useHttpPath true
git config --global credential.https://github.com.useHttpPath true -
请为每个帐户创建具有
repo范围的专用 personal access token (classic)。 或者,对于每个帐户以及你所属的每个组织,请创建一个可访问所需存储库并对存储库内容具有读取和写入权限的 fine-grained personal access token。 有关详细信息,请参阅“管理个人访问令牌”。 -
首次使用 Git 克隆存储库或访问已克隆的存储库中的数据时,Git 会请求凭据。 为可访问存储库的帐户提供 personal access token。
Git 将根据存储库的完整远程 URL 缓存 personal access token,你将能够使用正确的帐户在 GitHub.com 上访问和写入存储库数据。
-
打开 Git Bash。
-
若要确认凭据管理器的使用,请输入以下命令并记下输出。
Shell git config --get credential.helper
git config --get credential.helper -
如果输出确认在使用凭据管理器,请为凭据管理器清除存储的凭据。
-
如果输出不包含凭据管理器的名称,则未配置凭据管理器,可以继续执行下一步。
-
如果输出为
manager(在旧版本中为manager-core),则你使用的是 Git 凭据管理器。 若要清除凭据,请运行以下命令。Shell echo "protocol=https`nhost=github.com" | git credential-manager erase
echo "protocol=https`nhost=github.com" | git credential-manager erase-
如果输出
wincred,则使用 Windows 凭据管理器。 若要清除凭据,请输入以下命令。Shell cmdkey /delete:LegacyGeneric:target=git:https://github.com
cmdkey /delete:LegacyGeneric:target=git:https://github.com
-
-
若要将 Git 配置为缓存你在 GitHub 上访问的每个存储库的完整远程 URL 的凭据,请输入以下命令。
Shell git config --global credential.https://github.com.useHttpPath true
git config --global credential.https://github.com.useHttpPath true -
请为每个帐户创建具有
repo范围的专用 personal access token (classic)。 或者,对于每个帐户以及你所属的每个组织,请创建一个可访问所需存储库并对存储库内容具有读取和写入权限的 fine-grained personal access token。 有关详细信息,请参阅“管理个人访问令牌”。 -
首次使用 Git 克隆存储库或访问已克隆的存储库中的数据时,Git 会请求凭据。 为可访问存储库的帐户提供 personal access token。
Git 将根据存储库的完整远程 URL 缓存 personal access token,你将能够使用正确的帐户在 GitHub.com 上访问和写入存储库数据。
-
打开终端。
-
若要确认凭据管理器的使用,请输入以下命令并记下输出。
Shell git config --get credential.helper
git config --get credential.helper -
如果输出确认在使用凭据管理器,请为凭据管理器清除存储的凭据。
-
如果输出不包含凭据管理器的名称,则未配置凭据管理器,可以继续执行下一步。
-
如果输出为
manager(在旧版本中为manager-core),则你使用的是 Git 凭据管理器。 若要清除凭据,请运行以下命令。Shell echo "protocol=https\nhost=github.com" | git credential-manager erase
echo "protocol=https\nhost=github.com" | git credential-manager erase
-
若要将 Git 配置为缓存你在 GitHub 上访问的每个存储库的完整远程 URL 的凭据,请输入以下命令。
Shell git config --global credential.https://github.com.useHttpPath true
git config --global credential.https://github.com.useHttpPath true -
请为每个帐户创建具有
repo范围的专用 personal access token (classic)。 或者,对于每个帐户以及你所属的每个组织,请创建一个可访问所需存储库并对存储库内容具有读取和写入权限的 fine-grained personal access token。 有关详细信息,请参阅“管理个人访问令牌”。 -
首次使用 Git 克隆存储库或访问已克隆的存储库中的数据时,Git 会请求凭据。 为可访问存储库的帐户提供 personal access token。
Git 将根据存储库的完整远程 URL 缓存 personal access token,你将能够使用正确的帐户在 GitHub.com 上访问和写入存储库数据。
使用 SSH 和 GIT_SSH_COMMAND 参与多个帐户
如果要为这两个帐户都使用 SSH 协议,则可以为每个帐户使用不同的 SSH 密钥。 有关使用 SSH 的详细信息,请参阅 使用 SSH 连接到GitHub。
若要为克隆到工作站的不同存储库使用不同的 SSH 密钥,必须为 Git 操作编写 shell 包装器函数。 该函数应执行以下步骤。
- 使用命令(例如
git config --get remote.origin.url)确定存储库的全名及所有者。 - 选择用于身份验证的正确 SSH 密钥。
- 相应地修改
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
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 密钥同时向 具有托管用户的组织 内部的存储库和企业外部的存储库贡献代码。
-
为你的具有托管用户的组织中的存储库创建一个新的 SSH 密钥。 请参阅“生成新的 SSH 密钥并将其添加到 ssh-agent”。 保存密钥时,请为它提供与现有密钥不同的文件名(例如,将 -emu 添加到建议的文件名称)。
-
将新的 SSH 密钥添加到你的 托管用户帐户。 请参阅“将新的 SSH 密钥添加到GitHub帐户”
-
将 SSH 配置文件
~/.ssh/config配置为使用不同的密钥。 例如,如果你的个人 SSH 密钥是~/.ssh/id_ed25519,而你的 具有托管用户的企业 SSH 密钥是~/.ssh/id_ed25519-emuText Host github.com IdentityFile ~/.ssh/id_ed25519 IdentitiesOnly yes Host github-emu.com Hostname github.com IdentityFile ~/.ssh/id_ed25519-emu IdentitiesOnly yesHost 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 在连接时使用正确的密钥。 -
通过运行以下命令测试 SSH 配置,以使用与个人帐户关联的 SSH 密钥进行连接 - 有关详细信息,请参阅 测试 SSH 连接
Shell ssh -T git@github.com
ssh -T git@github.com测试是否可以使用你的 GitHub SSH 密钥连接到 (具有托管用户的企业)
Shell ssh -T git@github-emu.com
ssh -T git@github-emu.com -
告诉
git在 具有托管用户的组织 中下载或上传存储库时使用正确的密钥。 要列出你的 具有托管用户的企业 中的组织,1. 在 GitHub 的右上角,单击个人资料图片,然后单击“ Your organizations”****。- 对于列出的每个组织,请告知
git使用github-emu.com主机。
例如,如果你的某个组织名为
octocat-emu,那么要让git在github-emu.com组织的存储库中使用主机octocat-emu,请运行以下命令Shell git config --global url."git@github-emu.com:octocat-emu/".insteadOf "git@github.com:octocat-emu/"
git config --global url."git@github-emu.com:octocat-emu/".insteadOf "git@github.com:octocat-emu/" - 对于列出的每个组织,请告知
现在,在 octocat-emu 组织中使用 SSH 克隆存储库时,git 将使用与您的 具有托管用户的企业 关联的 SSH 密钥,而不是您的个人密钥。
后续步骤
有关参考信息,请参阅 个人帐户参考。