当前位置:  开发笔记 > 运维 > 正文

多个github帐户在同一台​​计算机上?

如何解决《多个github帐户在同一台​​计算机上?》经验,为你挑选了9个好方法。

试着从我的计算机上处​​理我的实际"工作"回购,以及我在git hub上的个人回购.

工作帐户首先设置,一切都完美无瑕.

然而,我的个人帐户似乎无法推送到我的个人仓库,这是根据不同的帐户/电子邮件设置的.

我已经尝试将我的工作密钥复制到我的个人帐户,但这会引发错误,因为密钥只能附加到一个帐户.

如何从他们各自的github凭据中推送/拉出两个帐户?



1> Pavan..:

您需要做的就是使用多个SSH密钥对配置SSH设置.

这个链接很容易理解(感谢Eric):http: //code.tutsplus.com/tutorials/quick-tip-how-to-work-with-github-and-multiple-accounts--net-22574

生成SSH密钥(Win/msysgit) https://help.github.com/articles/generating-an-ssh-key/

此外,如果您使用不同的角色使用多个存储库,则需要确保您的各个存储库相应地覆盖了用户设置:

设置用户名,电子邮件和GitHub令牌 - 覆盖个人仓库的设置 https://help.github.com/articles/setting-your-commit-email-address-in-git/

希望这可以帮助.

注意: 有些人可能需要不同的电子邮件用于不同的存储库,从git 2.13你可以通过编辑在以下位置找到的全局配置文件来在目录的基础上设置电子邮件:~/.gitconfig使用条件如下:

[user]
    name = Pavan Kataria
    email = defaultemail@gmail.com

[includeIf "gitdir:~/work/"]
    path = ~/work/.gitconfig

然后您的工作特定config~/work/.gitconfig将如下所示:

[user]
    email = pavan.kataria@company.tld

感谢@alexg在评论中告知我这一点.


第一个链接现在重定向到用户与组织帐户的页面(不确定这是否是最初的预期).[本教程](http://net.tutsplus.com/tutorials/tools-and-tips/how-to-work-with-github-and-multiple-accounts/)很容易理解并解决了我的问题.
第3个链接现已中断(多个SSH密钥)
@AlmasAdilbek现在已经将近3年了,链接必将打破并继续打破.小心找到替代文章或再次找到原始来源,以便您可以帮助我更新链接供我交配?我不能永远不断修复断开的链接.
如果不总结实际帖子中的关键步骤,这不是答案.这个答案已经遭受了链接腐烂一次,但没有做出必要的更新,以提供问题的实际答案.

2> Greg Leszek..:

使用HTTPS:

将远程URL更改为https:

git remote set-url origin https://USERNAME@github.com/USERNAME/PROJECTNAME.git

你很高兴去:

git push

为了确保提交显示为USERNAME执行,也可以为此项目设置user.name和user.email:

git config user.name USERNAME
git config user.email USERNAME@example.com


从另一个私有存储库快速下载的最简单的解决方案.

3> Thank you..:

成型

要在单独的github/bitbucket /任何帐户下管理git repo,您​​只需生成一个新的SSH密钥.

但在此之前,我们可以开始推/拉式回购与你的第二个身份,我们得让你进入形状-假设你的系统是设置具有典型id_rsaid_rsa.pub密钥对.现在你tree ~/.ssh看起来像这样

$ tree ~/.ssh
/Users/you/.ssh
??? known_hosts
??? id_rsa
??? id_rsa.pub

首先,为密钥对命名 - 添加描述性名称将帮助您记住哪个密钥用于哪个用户/远程

# change to your ~/.ssh directory
$ cd ~/.ssh

# rename the private key
$ mv id_rsa github-mainuser

# rename the public key
$ mv id_rsa.pub github-mainuser.pub

接下来,让我们生成一个新密钥对 - 在这里我将命名新密钥github-otheruser

$ ssh-keygen -t rsa -b 4096 -f ~/.ssh/github-otheruser

现在,当我们看到tree ~/.ssh我们看到的时候

$ tree ~/.ssh
/Users/you/.ssh
??? known_hosts
??? github-mainuser
??? github-mainuser.pub
??? github-otheruser
??? github-otheruser.pub

接下来,我们需要设置一个~/.ssh/config定义我们的密钥配置的文件.我们将使用适当的所有者读/写权限创建它

$ (umask 077; touch ~/.ssh/config)

用您喜欢的编辑器打开它,并添加以下内容

Host github.com
  User git
  IdentityFile ~/.ssh/github-mainuser

Host github.com-otheruser
  HostName github.com
  User git
  IdentityFile ~/.ssh/github-otheruser

据推测,您将有一些与您的主要github身份相关联的现有回购.出于这个原因,"默认"github.com Host设置为使用您的mainuser密钥.如果您不希望某个帐户优先于另一个帐户,我将向您展示如何更新系统上的现有存储库以使用更新的ssh配置.


将新的SSH密钥添加到github

头部到github.com/settings/keys添加新的公共密钥

您可以使用以下方法获取公钥内容:将其复制/粘贴到github

$ cat ~/.ssh/github-otheruser.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQDBVvWNQ2nO5...

现在您的新用户身份已全部设置 - 下面我们将向您展示如何使用它.


完成任务:克隆回购

那么这是如何与git和github一起工作的呢?好吧,因为你不能没有鸡蛋和鸡蛋,我们将看看克隆一个现有的回购.如果您的工作场所有新的github帐户,并且您已被添加到公司项目中,则这种情况可能适用于您.

假设github.com/someorg/somerepo已经存在并且您已添加到其中 - 克隆就像一样简单

$ git clone github.com-otheruser:someorg/somerepo.git

粗体部分必须Host我们在您的~/.ssh/config文件中设置的名称匹配.这正确地将git连接到相应的IdentityFile并使用github正确地验证你


完成任务:创建一个新的仓库

好吧,因为你不能没有鸡蛋和鸡蛋,我们会考虑在你的二级账户上发布一个新的回购.这种情况适用于使用其辅助github帐户创建内容的用户.

让我们假设你已经在本地完成了一些工作,现在你已经准备好推向github了.如果你愿意,你可以跟随我

$ cd ~
$ mkdir somerepo
$ cd somerepo
$ git init

现在配置此repo以使用您的身份

$ git config user.name "Mister Manager"
$ git config user.email "someuser@some.org"

现在进行第一次提交

$ echo "hello world" > readme
$ git add .
$ git commit -m "first commit"

检查提交以查看使用git log使用的新身份

$ git log --pretty="%H %an <%ae>"
f397a7cfbf55d44ffdf87aa24974f0a5001e1921 Mister Manager 

好吧,是时候推向github了!由于github还不知道我们的新回购,首先去github.com/new并创建你的新回购 - 将其命名为somerepo

现在,要使用正确的身份/凭证将您的仓库配置为与github"对话",我们添加了一个远程.假设您的新帐户的github用户名是someuser......

$ git remote add origin github.com-otheruser:someuser/somerepo.git

粗体部分绝对是关键的,它必须Host我们在您的~/.ssh/config文件中定义的部分匹配

最后,推动回购

$ git push origin master

更新现有存储库以使用新的SSH配置

假设您已经克隆了一些repo,但现在您想要使用新的SSH配置.在上面的示例中,我们通过在SSH配置文件中分配您的先前id_rsa/ id_rsa.pub密钥对来保持现有的回购Host github.com.这没有什么不对,但我现在至少有5个github配置,我不喜欢将其中一个配置为"默认"配置 - 我宁愿明确每个配置.

在我们这之前

Host github.com
  User git
  IdentityFile ~/.ssh/github-mainuser

Host github.com-otheruser
  HostName github.com
  User git
  IdentityFile ~/.ssh/github-otheruser

所以我们现在将其更新为此(以粗体显示)

Host github.com-mainuser
  HostName github.com
  User git
  IdentityFile ~/.ssh/github-mainuser

Host github.com-otheruser
  HostName github.com
  User git
  IdentityFile ~/.ssh/github-otheruser

但这意味着现在任何带有github.com遥控器的现有仓库将不再使用此身份文件.但不要担心,这是一个简单的解决方案.

要更新任何现有的repo以使用新的SSH配置,只需打开repo的git配置文件并更新url!

$ cd existingrepo
$ nano .git/config

更新远程原点字段(以粗体显示更改)

[remote "origin"]
        url = github.com-mainuser:someuser/existingrepo.git
        fetch = +refs/heads/*:refs/remotes/origin/*

而已.现在你可以push/ pull心灵的内容


SSH密钥文件权限

如果您的公钥无法正常运行时遇到问题,SSH 对您目录中允许的文件权限~/.ssh和相应的密钥文件非常严格

根据经验,任何目录应该是700和任何文件应该是600- 这意味着它们是所有者读/写 - 没有其他组/用户可以读/写它们

$ chmod 700 ~/.ssh
$ chmod 600 ~/.ssh/config
$ chmod 600 ~/.ssh/github-mainuser
$ chmod 600 ~/.ssh/github-mainuser.pub
$ chmod 600 ~/.ssh/github-otheruser
$ chmod 600 ~/.ssh/github-otheruser.pub

我如何管理我的SSH密钥

我为每个连接的主机管理单独的SSH密钥,这样如果任何一个密钥被破坏,我就不必在我使用该密钥的每个其他地方更新密钥.这就像当你从Adobe获得有关其用户信息的1.5亿被盗的通知时 - 现在你必须取消该信用卡并更新依赖它的每项服务 - 这是多么令人讨厌.

这是我的~/.ssh目录的样子:.pem每个用户都有一个密钥,在我连接的每个域的文件夹中.我使用.pem密钥,所以每个密钥只需要一个文件.

$ tree ~/.ssh
/Users/naomik/.ssh
??? config
??? github.com
?   ??? naomik.pem
?   ??? someusername.pem
??? known_hosts
??? naomi.makes.software
?   ??? naomi.pem
??? somedomain.com
?   ??? someuser.pem
??? someotherdomain.org
    ??? someuser.pem

这里是我的相应/.ssh/config文件 - 显然github的内容与回答关于github的这个问题有关,但这个答案旨在让你掌握在任意数量的服务/机器上管理ssh身份的知识.

Host github.com-naomik
  HostName github.com
  User git
  IdentityFile ~/.ssh/github.com/naomik.pem

Host github.com-someuser
  HostName github.com
  User git
  IdentityFile ~/.ssh/github.com/someusername.pem

Host naomi.makes.software
  User naomi
  IdentityFile ~/.ssh/naomi.makes.software/naomi.pem

Host somedomain.com
  HostName 162.10.20.30
  User someuser
  IdentityFile ~/.ssh/somedomain.com/someuser.pem

Host someotherdomain.org
  User someuser
  IdentityFile ~/.ssh/someotherdomain.org/someuser.pem

从PEM密钥获取SSH公钥

上面你注意到我每个键只有一个文件.当我需要提供公钥时,我只需根据需要生成它.

所以当github请求你的ssh公钥时,运行这个命令将公钥输出到stdout - 在需要的地方复制/粘贴

$ ssh-keygen -y -f someuser.pem
ssh-rsa AAAAB3NzaC1yc2EAAAA...

请注意,这也是我用于将密钥添加到任何远程计算机的过程.该ssh-rsa AAAA...值将复制到远程~/.ssh/authorized_keys文件中


将您的id_rsa/ id_rsa.pub密钥对转换为PEM格式

所以你想驯服你的关键文件并减少一些文件系统的残缺?将密钥对转换为单个 PEM非常简单

$ cd ~/.ssh
$ openssl rsa -in id_rsa -outform pem > id_rsa.pem

或者,随着我们的例子上面,下面我们改名id_rsa -> github-mainuserid_rsa.pub -> github-mainuser.pub-所以

$ cd ~/.ssh
$ openssl rsa -in github-mainuser -outform pem > github-mainuser.pem

现在只是为了确保我们已将此转换为正确,您将需要验证生成的公钥是否与您的旧公钥匹配

# display the public key
$ cat github-mainuser.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAA ... R++Nu+wDj7tCQ==

# generate public key from your new PEM
$ ssh-keygen -y -f someuser.pem
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAA ... R++Nu+wDj7tCQ==

现在您拥有了自己的github-mainuser.pem文件,可以安全地删除旧文件github-mainusergithub-mainuser.pub文件 - 只需要PEM文件; 只需在需要时生成公钥^ _ ^


从头开始创建PEM密钥

您无需创建私钥/公钥对,然后转换为单个PEM密钥.您可以直接创建PEM密钥.

让我们创建一个 newuser.pem

$ openssl genrsa -out ~/.ssh/newuser.pem 4096

获取SSH公钥是一样的

$ ssh-keygen -y -f ~/.ssh/newuser.pem
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACA ... FUNZvoKPRQ==



4> 小智..:

通过在〜/ .ssh/config中为github.com创建不同的主机别名,并为每个主机别名提供自己的ssh密钥,您可以轻松地使用多个github帐户而不会产生混淆.那是因为github.com不是用户区分的,它总是只是git,而是用你用来连接的ssh键.只需使用自己的主机别名配置远程起源."

上述摘要由以下博客文章中的评论提供.

我发现这个解释最清楚了.它对我有用,至少截至2012年4月.

http://net.tutsplus.com/tutorials/tools-and-tips/how-to-work-with-github-and-multiple-accounts/



5> Matthew Skel..:

来自mishaba的http://net.tutsplus.com/tutorials/tools-and-tips/how-to-work-with-github-and-multiple-accounts/的详细信息对我来说非常有用.

从该页面:

$ touch ~/.ssh/config

然后将该文件编辑为类似的内容(每个帐户一个条目):

#Default GitHub
Host github.com
  HostName github.com
  User git
  IdentityFile ~/.ssh/id_rsa

Host github-COMPANY
  HostName github.com
  User git
  IdentityFile ~/.ssh/id_rsa_COMPANY


我还要注意,在执行克隆(以及可能的其他命令)时,需要使用"github.com"或"github-COMPANY",例如`git clone git @ github-COMPANY/repo/name.git`正确的ssh密钥.

6> David H..:

我使用shell脚本将我切换到我想要"活跃"的任何帐户.基本上,您从一个全新的开始,正确配置一个帐户并运行,然后将这些文件移动到具有正确前缀的名称.从那时起,您可以使用命令"github"或"gitxyz"来切换:

# my github script
cd ~/.ssh

if [ -f git_dhoerl -a -f git_dhoerl.pub -a -f config_dhoerl ]
then
    ; 
else 
    echo "Error: missing new files"
    exit 1
fi 

# Save a copy in /tmp, just in case
cp id_rsa /tmp
cp id_rsa.pub /tmp
cp config /tmp
echo "Saved old files in /tmp, just in case"

rm id_rsa
rm id_rsa.pub
rm config
echo "Removed current links/files"

ln git_dhoerl id_rsa
ln git_dhoerl.pub id_rsa.pub
ln config_dhoerl config

git config --global user.email "dhoerl@.com"
git config --global github.user "dhoerl"        
git config --global github.token "whatever_it_is"

ssh-add -D

我对此很幸运.我还在Xcode(为你的Mac用户)创建了一个运行脚本,所以它不会构建我的项目,除非我有正确的设置(因为它使用git):

在Dependencies之后运行脚本(使用/ bin/ksh作为shell):

if [ "$(git config --global --get user.email)" != "dhoerl@.com" ]
then
    exit 1
fi

编辑:添加新文件存在的测试和复制旧文件到/ tmp以通过@naomik下面的注释.



7> Pranav V R..:

转到〜/ .ssh

创建一个名为config的文件(没有扩展名)

打开配置文件并添加以下代码.(根据您的帐户更改)

    帐户1

    # account_1
    Host gitlab.com-account_1
    HostName gitlab.com
    User git
    PreferredAuthentications publickey
    IdentityFile ~/.ssh/id_rsa_account_1
    

    帐户2

    # Account2
    Host gitlab.com-Account2
    HostName gitlab.com
    User git
    PreferredAuthentications publickey
    IdentityFile ~/.ssh/id_rsa_Account2
    

    帐户3

    # Account_3
    Host github.com-Account3
    HostName github.com
    User git
    PreferredAuthentications publickey
    IdentityFile ~/.ssh/id_rsa_Account_3
    

添加远程URL如下

    帐户1

    git remote add origin git@gitlab.com-account_1:group_name/repo_name.git
    

    帐户2

    git remote add origin git@gitlab.com-Account2:group_name/repo_name.git
    

    帐户3

    git remote add origin github.com-Account3:github_username/repo_name.git
    

确保IdentityFile名称与在ssh密钥生成期间创建的名称相同.



8> Lukas..:

这个答案适合初学者(非git大师).我最近有这个问题,也许它只是我,但大多数答案似乎需要相当提前了解git.在阅读了包含此主题的几个堆栈溢出答案之后,以下是我需要采取的步骤,以便在GitHub帐户之间轻松切换(例如假设两个GitHub帐户,github.com/personalgitHub.com/work):

    检查现有的ssh密钥:打开终端并运行此命令以查看/列出ls -al ~/.ssh
    具有扩展名的现有ssh密钥文件.pub是您的ssh密钥,因此您应该有两个用于personalwork帐户.如果只有一个或没有,那么生成其他明智的时间就跳过这个.

    -生成ssh密钥:登录github(个人或工作人员),导航到设置并复制相关的电子邮件.
    现在回到终端并运行ssh-keygen -t rsa -C "the copied email",你会看到:

    生成公共/私有rsa密钥对.
    输入文件中保存密钥(/.../.ssh/id_rsa):


    id_rsa是默认名称为即将生成的SSH密钥,以便拷贝的路径,并重新命名默认情况下,例如 /.../.ssh/id_rsa_work当发电工作帐户.提供密码或只是输入忽略,你会读到像钥匙的randomart图像是:和图像.完成.
    为您的第二个github帐户再次重复此步骤.确保使用正确的电子邮件地址和不同的ssh密钥名称(例如id_rsa_personal)以避免覆盖.
    在此阶段,您应该ls -al ~/.ssh再次运行时看到两个ssh键.

    将ssh密钥与gitHub帐户关联:下一步是复制其中一个ssh密钥,运行此密钥,但替换自己的ssh密钥名称:pbcopy < ~/.ssh/id_rsa_work.pub替换id_rsa_work.pub为您所谓的ssh密钥.
    现在我们的ssh密钥被复制到剪贴板,返回到github帐户[确保您已复制的ssh密钥登录到工作帐户id_rsa_work]并导航到
    设置 - SSH和GPG密钥并单击新建SSH密钥按钮(不是新的GPG密钥顺便提一:D)
    给这个密钥一些标题,粘贴密钥并单击添加SSH密钥.你现在已经成功添加了ssh密钥或者注意到它一直都在那里很好(或者你得到一个错误,因为你选择了新的GPG密钥 而不是新的SSH密钥:D).

    将ssh密钥与gitHub帐户关联:对您的第二个帐户重复上述步骤.

    编辑全局git配置:最后一步是确保全局配置文件知道所有github帐户(可以这么说).
    运行git config --global --edit以编辑此全局文件,如果打开vim并且您不知道如何使用它,请按i进入插入模式,按如下所示编辑文件,然后按esc :wq键退出插入模式:

    [inside this square brackets give a name to the followed acc.] name = github_username email = github_emailaddress [any other name] name = github_username email = github_email [credential] helper = osxkeychain useHttpPath = true

完成!,现在当你试图从回购中推或拉时,你会被问到哪个GitHub帐户应该与这个回购链接,并且只询问一次,本地配置会记住这个链接,而不是全局配置,这样你就可以工作了在不同的回购中,与不同的帐户链接,而不必每次都编辑全局配置.



9> 小智..:

更简单易修,避免造成混乱。

Windows用户可以将多个或不同的git帐户用于不同的项目。

请执行以下步骤:转到控制面板,然后搜索凭据管理器。然后转到凭据管理器-> Windows凭据

现在,删除通用凭证标题下的git:https // github.com节点

这将删除当前凭据。现在您可以通过git pull添加任何项目,它将询问用户名和密码。

当您遇到其他帐户的任何问题时,请执行相同的过程。

谢谢

参考图片

推荐阅读
郑小蒜9299_941611_G
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有