Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在一台计算机上拥有2个git用户?_Git_Github - Fatal编程技术网

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

如何在一台计算机上拥有2个git用户?,git,github,Git,Github,我想练习使用GitHub执行pull请求,并学习如何查看不同用户之间的git差异。如何在macOS中的终端上设置另一个用户帐户来执行此操作?如何在用户之间切换?您可能使用以下命令设置现有用户 git config--global user.name 及 git config--global user.email 您可以制作一个单独的克隆,以便从不同的文件夹进行推拉。要使提交显示在不同的用户名下(取决于文件夹),请使用 git config--local user.name 及 git confi

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

您可能使用以下命令设置现有用户

git config--global user.name

git config--global user.email

您可以制作一个单独的克隆,以便从不同的文件夹进行推拉。要使提交显示在不同的用户名下(取决于文件夹),请使用

git config--local user.name

git config--local user.email

从第二个克隆中


--local
选项确保这只影响第二个副本。

作为第二个用户有三个方面

1.GitHub帐户 要将GitHub web界面作为另一个用户使用(例如,转移存储库、提交请求、发布评论),您需要登录到另一个帐户*

提示:在帐户之间切换是一件痛苦的事情,因为每次都要注销和登录。您可以使用专用浏览窗口、其他浏览器或其他浏览器配置文件同时登录到两个帐户

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

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

到第二个用户的GitHub帐户

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

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

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

如果您以这种方式克隆了第一个用户拥有的存储库,则在完成之前,您应该无法将提交推送到该存储库

测试SSH配置 如果遇到问题,请通过运行

ssh git@bob.github.com
(将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)?
键入
yes
,然后按ENTER键。(对于安全意识,首先检查指纹是否列在上)

如果您的配置正确,并且通过在“SSH和GPG密钥”页面中粘贴~/.SSH/bob_rsa.pub的内容,将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.
USER应该是第二个帐户的名称

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

ssh git@github.com
并获得相同的消息,但其中USER是您正常帐户的名称

3.Git作者元数据 Git在每次提交时存储作者的姓名和电子邮件地址。GitHub使用此信息显示提交历史记录中的用户化身。欺骗此信息(,)是微不足道的

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

git config --local user.name "NAME"
git config --local user.email "EMAIL"
将姓名和电子邮件替换为第二个用户的全名和电子邮件地址。
--local
标志修改每个存储库的配置文件(.git/config位于存储库的根目录中),而不是修改~/.gitconfig的
--global
标志。默认值是
--local
,因此实际上可以省略它

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



*细节:GitHub只允许每人拥有一个免费帐户。

我对GitHub提出的解决方案做了一点改进
()

要允许多个用户使用相同的git工作区,请执行以下操作:

  • 我通过在
    ~/.ssh/config
    文件中为每个用户创建一个条目来为每个用户创建主机名别名:
  • 注意:我在
    ~/.ssh/config
    文件中的ssh主机名中使用通配符作为默认git用户标识, 由于gitHub显示其带有MD5指纹的密钥,因此我使用
    FingerprintHash MD5

  • 如果我还没有这样做,我会启动一个ssh代理:
    eval“$(ssh代理-s)”
  • 然后我将密钥加载到ssh代理w/
    ssh-add~/.ssh/alice\u-rsa,,
    用ssh add-E md5-l验证它,,
    然后,为了测试它,我使用ssh的-T标志:

    ssh-v-T alice.github.com
    (注意,您必须将公钥加载到github端:,并且每个密钥只能使用“一次”(即仅用于一个gitaccount),因此,如果您已经拥有对其他git帐户的ssh访问权限,则需要剪切一个新密钥)

  • 我为每个主机名创建存储库别名:

    为此,我编辑my.git/config w/以下内容以更改源站的url:

  • 注意:如果您不想编辑
    .git/config
    文件,您可以使用命令实现同样的操作(确保替换正确的存储库名称):

    git远程删除源
    git远程添加源git@default.github.com:47/bin.git
    git远程添加bobgit@bob.github.com:47/bin.git
    git远程添加alicegit@alice.github.com:47/bin.git
    
  • 总而言之,它允许
    ssh git@github.com
    
    git config --local user.name "NAME"
    git config --local user.email "EMAIL"
    
    # aliases for github.com with different SSH private keys (identities)
    Host *.github.com
        HostName github.com
        FingerprintHash md5
        User: git
        IdentityFile ~/.ssh/id_rsa # (default git ssh-key)
    
    Host alice.github.com
        IdentityFile ~/.ssh/alice_rsa
    Host bob.github.com
        IdentityFile ~/.ssh/bob_rsa
    
    
    [remote "origin"]
    #  url = git@{{sshkeyowner}}.github.com:{{gitaccountname}}/{{gitreponame}}.git
       url = git@default.github.com:michel47/bin.git
      fetch = +refs/heads/*:refs/remotes/origin/*
    [remote "alice"]
       url = git@alice.github.com:michel47/bin.git
       fetch = +refs/heads/*:refs/remotes/alice/*
    [remote "bob"]
       url = git@bob.github.com:michel47/bin.git
       fetch = +refs/heads/*:refs/remotes/bob/*