试着从我的计算机上处理我的实际"工作"回购,以及我在git hub上的个人回购.
工作帐户首先设置,一切都完美无瑕.
然而,我的个人帐户似乎无法推送到我的个人仓库,这是根据不同的帐户/电子邮件设置的.
我已经尝试将我的工作密钥复制到我的个人帐户,但这会引发错误,因为密钥只能附加到一个帐户.
如何从他们各自的github凭据中推送/拉出两个帐户?
您需要做的就是使用多个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在评论中告知我这一点.
使用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
成型
要在单独的github/bitbucket /任何帐户下管理git repo,您只需生成一个新的SSH密钥.
但在此之前,我们可以开始推/拉式回购与你的第二个身份,我们得让你进入形状-假设你的系统是设置具有典型id_rsa
和id_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-mainuser
和id_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-mainuser
和github-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==
通过在〜/ .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/
来自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
我使用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下面的注释.
转到〜/ .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密钥生成期间创建的名称相同.
这个答案适合初学者(非git大师).我最近有这个问题,也许它只是我,但大多数答案似乎需要相当提前了解git.在阅读了包含此主题的几个堆栈溢出答案之后,以下是我需要采取的步骤,以便在GitHub帐户之间轻松切换(例如假设两个GitHub帐户,github.com/personal和gitHub.com/work):
检查现有的ssh密钥:打开终端并运行此命令以查看/列出ls -al ~/.ssh
具有扩展名的现有ssh密钥文件.pub
是您的ssh密钥,因此您应该有两个用于personal
和work
帐户.如果只有一个或没有,那么生成其他明智的时间就跳过这个.
-生成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帐户应该与这个回购链接,并且只询问一次,本地配置会记住这个链接,而不是全局配置,这样你就可以工作了在不同的回购中,与不同的帐户链接,而不必每次都编辑全局配置.
更简单易修,避免造成混乱。
Windows用户可以将多个或不同的git帐户用于不同的项目。
请执行以下步骤:转到控制面板,然后搜索凭据管理器。然后转到凭据管理器-> Windows凭据
现在,删除通用凭证标题下的git:https // github.com节点
这将删除当前凭据。现在您可以通过git pull添加任何项目,它将询问用户名和密码。
当您遇到其他帐户的任何问题时,请执行相同的过程。
谢谢
参考图片