关于多个帐户的管理
在某些情况下,您可能需要在 GitHub 上使用多个帐户。例如,您可能拥有一个用于开源贡献的个人帐户,并且您的雇主也可能为您在企业内创建和管理一个用户帐户。
您不能使用托管用户帐户为 GitHub.com 上的公共项目做出贡献,因此您必须使用您的个人帐户为这些资源做出贡献。有关更多信息,请参阅 GitHub Enterprise Cloud 文档中的“关于企业托管用户”。
如果您需要使用多个帐户,您可以保持登录到您的帐户并在它们之间切换。例如,在个人帐户和服务帐户之间切换。有关更多信息,请参阅“在帐户之间切换”。
如果您想使用一个工作站从两个帐户都进行贡献,您可以通过使用混合协议访问存储库数据或根据每个存储库使用凭据来简化 Git 的贡献。
警告
当您使用一个工作站为两个单独的帐户贡献时,请注意。管理两个或多个帐户可能会增加错误地将内部代码泄露给公众的机会。
如果您不需要使用托管用户帐户,GitHub 建议您使用一个个人帐户在 GitHub.com 上完成所有工作。使用单个个人帐户,您可以使用一个身份为个人、开源或专业项目组合做出贡献。其他人可以邀请该帐户为个人存储库和组织拥有的存储库做出贡献,并且该帐户可以是多个组织或企业的成员。
使用 HTTPS 和 SSH 为两个帐户贡献
如果您从一台工作站使用两个账户进行贡献,则可以通过为每个账户使用不同的协议和凭据来访问代码库。
Git 可以使用 HTTPS 或 SSH 协议来访问和更新 GitHub 上代码库中的数据。您用于克隆代码库的协议决定了您的工作站将在访问代码库时使用哪些凭据进行身份验证。使用这种账户管理方法,您可以存储一个账户的凭据以用于 HTTPS 连接,并将 SSH 密钥上传到另一个账户以用于 SSH 连接。
您可以在代码库页面上找到克隆代码库的 HTTPS 或 SSH URL。有关更多信息,请参阅“克隆代码库”。
有关使用 SSH 访问 GitHub 上代码库的更多信息,请参阅“使用 SSH 连接到 GitHub”。
使用 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
环境变量以指定一个 SSH 命令,该命令使用 PATH/TO/KEY/FILE 中的私钥文件对 GitHub.com 上名为 OWNER/REPOSITORY 的代码库进行身份验证克隆。
GIT_SSH_COMMAND='ssh -i PATH/TO/KEY/FILE -o IdentitiesOnly=yes' git clone [email protected]:OWNER/REPOSITORY
GIT_SSH_COMMAND='ssh -i PATH/TO/KEY/FILE -o IdentitiesOnly=yes' git clone [email protected]:OWNER/REPOSITORY