使用 HTTPS 和个人访问令牌对多个账户进行贡献
或者,如果您想为两个账户都使用 HTTPS 协议,您可以为每个账户创建不同的个人访问令牌,并通过为每个仓库配置 Git 来存储不同的凭据。
-
打开终端。
-
要确认您正在使用凭据管理器,请输入以下命令并记下输出。
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 Credential Manager。要清除凭据,请运行以下命令。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。或者,为您每个账户以及您所在的每个组织创建一个细粒度个人访问令牌,该令牌能够访问所需的仓库并拥有对仓库内容的读写权限。更多信息,请参见 管理您的个人访问令牌。 -
第一次使用 Git 克隆仓库或访问已克隆仓库的数据时,Git 会请求凭据。请提供对该仓库有访问权限的账户的个人访问令牌。
Git 将根据仓库的完整远程 URL 缓存个人访问令牌,您随后即可使用正确的账户在 GitHub.com 上访问并写入仓库数据。
-
打开 Git Bash。
-
要确认您正在使用凭据管理器,请输入以下命令并记下输出。
Shell git config --get credential.helper
git config --get credential.helper -
如果输出确认您正在使用凭据管理器,请清除该凭据管理器中存储的凭据。
- 如果输出中未包含凭据管理器的名称,则表示未配置凭据管理器,您可以继续进行下一步。
- 如果输出为
manager(或旧版本中的manager-core),则表示您正在使用 Git Credential Manager。要清除凭据,请运行以下命令。
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。或者,为您每个账户以及您所在的每个组织创建一个细粒度个人访问令牌,该令牌能够访问所需的仓库并拥有对仓库内容的读写权限。更多信息,请参见 管理您的个人访问令牌。 -
第一次使用 Git 克隆仓库或访问已克隆仓库的数据时,Git 会请求凭据。请提供对该仓库有访问权限的账户的个人访问令牌。
Git 将根据仓库的完整远程 URL 缓存个人访问令牌,您随后即可使用正确的账户在 GitHub.com 上访问并写入仓库数据。
-
打开终端。
-
要确认您正在使用凭据管理器,请输入以下命令并记下输出。
Shell git config --get credential.helper
git config --get credential.helper -
如果输出确认您正在使用凭据管理器,请清除该凭据管理器中存储的凭据。
- 如果输出中未包含凭据管理器的名称,则表示未配置凭据管理器,您可以继续进行下一步。
- 如果输出为
manager(或旧版本中的manager-core),则表示您正在使用 Git Credential Manager。要清除凭据,请运行以下命令。
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。或者,为您每个账户以及您所在的每个组织创建一个细粒度个人访问令牌,该令牌能够访问所需的仓库并拥有对仓库内容的读写权限。更多信息,请参见 管理您的个人访问令牌。 -
第一次使用 Git 克隆仓库或访问已克隆仓库的数据时,Git 会请求凭据。请提供对该仓库有访问权限的账户的个人访问令牌。
Git 将根据仓库的完整远程 URL 缓存个人访问令牌,您随后即可使用正确的账户在 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 环境变量设置为指定使用位于 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测试是否可以使用企业受管用户的 SSH 密钥连接到(GitHub)。
Shell ssh -T git@github-emu.com
ssh -T git@github-emu.com -
告知
git在下载或上传受管用户组织中的仓库时使用正确的密钥。要列出企业受管用户中的组织,- 在 GitHub 右上角,点击您的个人头像,然后点击 组织。
- 对列出的每个组织,告知
git使用github-emu.com主机。
例如,如果您的某个组织名为
octocat-emu,则要告知git对octocat-emu组织中的仓库使用github-emu.com主机,请运行以下命令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/"
现在,当您使用 SSH 克隆 octocat-emu 组织中的仓库时,git 将使用与企业受管用户关联的 SSH 密钥,而不是您的个人密钥。
后续步骤
有关参考信息,请参阅 个人账户参考。