如何在一台计算机上拥有2个git用户?

sta*_*lei 5 git github

我想练习使用GitHub做拉取请求,并学习如何查看不同用户之间的git差异.如何在macOS终端上设置另一个用户帐户来执行此操作?如何在用户之间切换?

tom*_*tom 1

充当第二用户有三个方面。

1.GitHub账户

要以其他用户身份使用 GitHub Web 界面(例如分叉存储库、提交拉取请求、发表评论),您需要登录到另一个帐户。*

提示:在帐户之间切换很麻烦,因为您每次都必须注销并登录。您可以使用私人浏览窗口、不同的浏览器或不同的浏览器配置文件同时登录两个帐户。

2.SSH认证

可以通过 HTTPS 或 SSH 访问 GitHub 存储库。两者都需要身份验证,GitHub 使用身份验证来实现权限级别。我将描述如何使用配置为第二个用户进行身份验证的 SSH 来克隆存储库。

使用ssh-keygen -f KEYFILE其中KEYFILE是新密钥的路径(例如~/.ssh/bob_rsa )生成新的 SSH 密钥

将 SSH 密钥添加到第二个用户的 GitHub 帐户。

SSH 需要配置为使用~/.ssh/bob_rsa,但仅当您尝试以第二个用户身份克隆存储库时。这样,您仍然可以使用添加到普通 GitHub 帐户的 SSH 密钥以普通用户身份克隆存储库。可以根据主机名指定不同的配置,但对于 GitHub 存储库,主机名始终为github.com。要仅指定部分克隆存储库的配置,请通过将以下内容附加到~/.ssh/config来添加主机别名(credit):

# alias for github.com with a custom SSH key
Host bob.github.com
    HostName github.com
    IdentityFile ~/.ssh/bob_rsa
Run Code Online (Sandbox Code Playgroud)

我使用了主机名bob.github.com,但它可以是任何字符串。

现在,您可以使用主机名bob.github.com(或您在 SSH 配置中使用的主机名)作为第二个用户克隆 GitHub 存储库:

git clone git@bob.github.com:USER/PROJECT.git
Run Code Online (Sandbox Code Playgroud)

如果您以这种方式克隆第一个用户拥有的存储库,则在将第二个用户添加为协作者之前,您应该无法将提交推送到它。

测试 SSH 配置

如果遇到问题,请运行以下命令检查 SSH 是否正常工作

ssh git@bob.github.com
Run Code Online (Sandbox Code Playgroud)

(将bob.github.com替换为行中的主机名Host XXX)。

第一次通过 SSH 连接到 GitHub 时,您应该收到类似以下的消息

The authenticity of host 'github.com (192.30.253.113)' can't be established.
RSA key fingerprint is 16:27:ac:a5:76:28:2d:36:63:1b:56:4d:eb:df:a6:48.
Are you sure you want to continue connecting (yes/no)?
Run Code Online (Sandbox Code Playgroud)

键入yes,然后点击ENTER。(出于安全意识,请首先检查指纹是否列在GitHub 的 SSH 密钥页面上)。

如果您的配置正确,并且通过将~/.ssh/bob_rsa.pub的内容粘贴到“SSH 和 GPG 密钥”页面中,将 SSH 密钥添加到第二个 GitHub 帐户,您应该看到

PTY allocation request failed on channel 0
Hi USER! You've successfully authenticated, but GitHub does not provide shell access.
Connection to github.com closed.
Run Code Online (Sandbox Code Playgroud)

USER应该是第二个帐户的名称。

如果您还为普通帐户设置了 SSH 访问,则应该能够运行

ssh git@github.com
Run Code Online (Sandbox Code Playgroud)

并得到相同的消息,但其中USER是您普通帐户的名称。

3.Git 作者元数据

Git 在每次提交时都会存储作者的姓名和电子邮件地址。例如,GitHub 使用此信息在提交历史记录中显示用户头像。欺骗此信息很简单 ( 1 , 2 )。

作者的姓名和电子邮件地址通常存储在全局配置文件(~/.gitconfig)中。您可以通过在存储库的目录中运行以下命令来基于每个存储库覆盖它们:

git config --local user.name "NAME"
git config --local user.email "EMAIL"
Run Code Online (Sandbox Code Playgroud)

将NAMEEMAIL替换为第二个用户的全名和电子邮件地址。该--local标志修改每个存储库的配置文件(存储库根目录中的.git/config),而不是--global修改~/.gitconfig的标志。默认是--local,所以实际上可以省略。

现在您已经有了一个克隆,您实际上是第二个用户。使用另一个(正常)克隆作为第一个用户工作。


*附注:GitHub 的服务条款仅允许每人一个免费帐户。