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


417

尝试从计算机上同时使用我的实际“工作”存储库和git hub上的个人存储库。

首先建立工作帐户,然后一切正常。

但是,我的个人帐户似乎无法推送到我的个人存储库,该存储库是在其他帐户/电子邮件下设置的。

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

我如何从各自的github凭证中推入/拉出两个帐户?


3
链接http://net.tutsplus.com/tutorials/tools-and-tips/how-to-work-with-github-and-multiple-accounts中给出的步骤对我来说效果很好,只是想添加一件事还必须使用<br>&nbsp;添加您的个人回购密钥 ssh-add ~/.ssh/id_rsa_COMPANY <br/>告诉ssh-agent包括它以供使用。<hr />上面的教程对Rest来说对我来说很好。
Brut3e

2
“当然,因为密钥只能附加到一个帐户”?为什么?
Sparr

Git 2.13及更高版本支持.gitconfig中的条件包含,这是管理每个文件夹层次结构身份的有用方法。stackoverflow.com/a/36296990/901597
乔·鲍比

Answers:


275

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

另外,如果您要使用不同的角色来处理多个存储库,则需要确保您的各个存储库具有相应的用户设置:

设置用户名,电子邮件和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

然后,您特定于工作的配置〜/ work / .gitconfig看起来像这样:

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

谢谢@alexg在评论中告知我。


4
第三个链接现在已断开(多个SSH密钥)
RustyTheBoyRobot 2012年

12
现在,第一个链接将重定向到用户帐户和组织帐户上的页面(不确定这是否是最初的目的)。 本教程易于理解并解决了我的问题。
Eric H.

1
@Camilo因为我不知道新的更新链接是什么,所以如果他知道更新的链接,那么对他来说,将其连接起来很不错:)
Pavan

4
@AlmasAdilbek已经快三年了,链接肯定会断开,并继续断开。希望找到替代文章或再次找到原始资料,以便您可以为我帮忙更新链接?我不能永远保持修复断开的链接。
帕万

3
如果不总结您实际帖子中的关键步骤,这不是答案。这个答案曾经一次遭受链接腐烂的困扰,但是还没有进行必要的更新来提供问题的实际答案。
谢谢您

138

使用HTTPS:

将远程URL更改为https:

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

而且您很高兴:

git push

为了确保提交显示为USERNAME所执行的,也可以为此项目设置user.nameuser.email

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

8
从另一个专用存储库快速下载的最简单解决方案。
Jaap Geurts

1
这是我在堆栈中找到的最佳解决方案
Harvinder Singh

该解决方案提供了最简单的方法,因为我不想添加更多的ssh密钥。请注意,如果您已经设置了user.name并设置user.email--global标志,则按照他在上面所说的做即可在本地为该回购设置它。那解决了很多麻烦。现在,删除旧的回购....
thatrobotguy

71

成型

要在单独的github / bitbucket / whatever帐户下管理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连接到对应的git,IdentityFile并使用github正确验证您的身份


完成工作:创建一个新的仓库

好吧,因为您不能没有鸡蛋和鸡蛋,所以我们会考虑在您的辅助帐户上发布新的回购协议。这种情况适用于使用其辅助github帐户创建内容的用户。

假设您已经在本地完成了一些工作,现在可以推送到github了。如果愿意,可以跟着我

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

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

$ 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 <someuser@some.org>

好了,该推送到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配置

假设您已经克隆了一些存储库,但是现在您想使用新的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远程控制的现有存储库都将不再与此标识文件一起使用。但是不用担心,这是一个简单的修复。

要更新任何现有的存储库以使用新的SSH配置,只需打开存储库的git config文件并更新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==

1
我知道这是一个古老的问题,但这并不能为几乎每个答案都依赖于某个教程的链接而导致链接腐烂的事实提供借口。链接来源/引用是可以的,但是如果您不总结此处发布的答案中的关键内容,则不能依靠链接。
谢谢你

我赞成您出色而详尽的答案,因为它显然是正确的答案。我的问题是它很复杂,在使用了一些帐户几年后,我得到了一个新帐户,然后就想不起如何“正确地进行”操作。我下面的方法非常简单-我只创建了3个新文件和一个新脚本,我很高兴。多年来,它对我来说都是完美无缺的。读者可以决定最适合自己的方法。
David H

DavidH我很感谢您的发言。如果从整体上看,答案确实会很复杂,但是如果读者的唯一目标是添加另一个github身份–其余所有部分,则读者实际上只需要关心一小部分答案即可。答案旨在为您提供一个强大的解决方案,用于管理一般的SSH密钥,并且完全是可选的。
谢谢您

我认为git clone github.com-otheruser:someorg/somerepo.git需要git clone git@github.com-otheruser:someorg/somerepo.git(添加git@)。至少,这就是我所需要的。
CommonsWare

@CommonsWare的所有命令行选项(例如指定用户)也可以在SSH配置中完成。例如:Host github.com(newline)User git(newline)IdentityFile ...
谢谢您,

24

通过在〜/ .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/


1
您可能还需要运行$ ssh-add ~/.ssh/id_rsa_COMPANY-请参阅错误:权限被拒绝(公钥)-用户文档
2014年

22

由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

8
我还要注意的是,在进行克隆(以及可能使用其他命令)git clone git@github-COMPANY/repo/name.git以获取正确的ssh密钥时,需要使用“ github.com”或“ github-COMPANY” 。
hellatan

@dtan:如果必须通过https克隆,我将如何实现?git clone https://github-COMPANY/GitUserName/projectname.git似乎不起作用。使用github.com的默认密钥可以正常工作。
艾萨克·尼基特帕斯

1
@IsaacRemuant,您是否绝对必须通过https?每次要拉/推时,都必须输入用户凭据。最好是可以做git://github-COMPANY...projectname.git。https通话是否有任何错误消息?
hellatan 2012年

@dtan:尽管显然已经为我打开了端口22,但是我遇到了一些问题。ssh: connect to host github.com port 22: Bad file number fatal: The remote end hung up unexpectedly。到目前为止,https是唯一的方法。 $ git clone https://github-USER/UserName/test_project_user.git Cloning into test_project_user... error: Couldn't resolve host 'github-USER' while accessing https://github-USER/N UserName/test_project_user.git/info/refs fatal: HTTP request failed 我不确定它是否可能与配置文件或我尝试使用https模拟git调用的方式有关。
艾萨克·尼基特帕斯

最终,我将对所有问题进行深入分析,并将其作为问题适当地发布。
Isaac Nequittepas 2012年

13
  • 转到〜/ .ssh
  • 创建一个名为config的文件(没有扩展名)
  • 打开配置文件并添加以下代码。(根据您的帐户更改)

    1. 帐户1

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

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

      # Account_3
      Host github.com-Account3
      HostName github.com
      User git
      PreferredAuthentications publickey
      IdentityFile ~/.ssh/id_rsa_Account_3
      
  • 如下添加远程URL

    1. 帐户1

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

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

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

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


您能解释一下为什么使用PreferredAuthentications publickey吗?
奥利弗·皮尔曼

@OliverPearmain在这里,我告诉ssh我们首选的身份验证方法是publickey。您可以在PreferredAuthentications中使用密码,但可能必须输入密码进行身份验证。
Pranav VR

1
感谢@Pranav VR的回复,听起来我想使用相同的内容:-)
Oliver Pearmain

11

我使用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@<company>.com"
git config --global github.user "dhoerl"        
git config --global github.token "whatever_it_is"

ssh-add -D

我很幸运。我还在Xcode中创建了一个运行脚本(适用于Mac用户),因此除非我进行了适当的设置(因为它使用git),否则它不会生成我的项目:

运行依赖项之后的脚本(使用/ bin / ksh作为外壳):

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

编辑:添加了对新文件存在的测试,并将旧文件复制到/ tmp以解决下面@naomik的评论。


在发布复制和粘贴多个问题的样板/惯用答案时要小心,这些问题通常会被社区标记为“垃圾邮件”。如果你这样做的话,通常指的问题是重复的,以便它们标记为这种代替:stackoverflow.com/questions/7548158stackoverflow.com/questions/3225862stackoverflow.com/questions/7924937
千电子伏

1
这是一场噩梦。如果某人在了解将要删除其id_rsaid_rsa.pub密钥之前运行该脚本,则他们可能会被锁定在遥控器之外。
谢谢您

@naomik更新脚本都检查新文件先,旧文件保存在/ tmp目录
David H制作

10

这个答案是给初学者的(none-git gurus)。我最近遇到了这个问题,也许只是我一个问题,但是大多数答案似乎都需要对git有相当的了解。在阅读了包括该线程的几个堆栈溢出答案之后,这是我需要采取的步骤,以便在GitHub帐户之间轻松切换(例如,假设有两个GitHub帐户,github.com/personalgitHub.com/work):

  1. 检查现有的ssh密钥:打开终端并运行此命令以查看/列出ls -al ~/.ssh
    扩展名为ssh的现有ssh密钥文件,.pub因此您应该为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键。
  2. 将ssh密钥与gitHub帐户关联:下一步是复制一个ssh密钥,运行它,但替换您自己的ssh密钥名称:pbcopy < ~/.ssh/id_rsa_work.pub,替换id_rsa_work.pub为您所称的名称。
    现在,我们的ssh密钥已复制到剪贴板,请返回github帐户[如果您复制的ssh密钥为,请确保登录到工作帐户id_rsa_work],然后导航至
    设置-SSH和GPG密钥,然后单击新建SSH密钥”按钮(不新的GPG密钥 btw:D)
    为此密钥提供一些标题,将其粘贴并单击Add SSH key。现在,您已经成功添加了ssh密钥,或者注意到它一直都存在,这还是可以的(或者因为选择了New GPG key 而不是您而收到错误消息新的SSH密钥:D)。
  3. 将ssh密钥与gitHub帐户关联:对第二个帐户重复上述步骤。
  4. 编辑全局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帐户应与此存储库链接,并且仅询问一次,本地配置将记住此链接,而不记住全局配置,因此您可以工作链接到不同帐户的不同存储库上,而不必每次都编辑全局配置。


他们应该允许标签作为答案,这是针对mac OS的。
user4015990

5

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

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

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

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

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

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

谢谢

参考图片


4

刚刚在Windows上找到了解决方案,对每个存储库都使用了凭据:

cd c:\User1\SomeRepo
git config --local credential.https://github.com.user1 user1
git config --local credential.useHttpPath true
git config --local credential.helper manager
git remote set-url origin https://USERNAME@github.com/USERNAME/PROJECTNAME.git

凭证格式。https://github.com。告诉凭证帮助者凭证的URL。“ useHttpPath”告诉凭证管理器使用凭证的路径。如果省略useHttpPath,则凭证管理器将为https://github.com存储一个凭证。如果包含该凭据,则凭据管理器将存储多个凭据,这正是我真正想要的。



2

除了为多个帐户创建多个SSH密钥外,您还可以考虑使用相同的帐户电子邮件在每个项目上添加协作者并永久存储密码。

#this store the password permanently
$ git config --global credential.helper wincred

我用不同的电子邮件设置了多个帐户,然后将其中一个用户和电子邮件作为协作者之一放在每个帐户上。通过这种方式,我可以访问所有帐户,而无需添加SSH密钥或切换到其他用户名,也无需通过电子邮件发送身份验证。


2

最简单明了的方法(IMHO)-没有配置文件也没有太多麻烦

只需创建另一个ssh密钥即可。

假设您有一个新的GitHub帐户,只需为其创建一个新密钥:

sh-keygen -t rsa -C "email@work_mail.com" -f "id_rsa_work_user1"`

现在,您应该拥有旧的和新的,然后运行它们:

ls -al ~/.ssh

您只需要运行一次以上。

从现在开始,每次您要在两者之间切换时,只需运行:

ssh-add -D
ssh-add ~/.ssh/id_rsa_work_user1 #make to use this without the suffix .pub

为了切换到旧版本,请再次运行:

 ssh-add -D
 ssh-add ~/.ssh/<previous id_rsa>

1

另一种更简单的方法是使用多个桌面应用程序,例如我在做什么,在Github桌面上使用帐户A,而在Github Kraken上使用帐户B



1

如果您不想弄乱~/.ssh/config这里提到的文件,可以git config core.sshCommand "ssh -i ~/.ssh/custom_id_rsa"在要从另一个帐户提交的仓库中运行。

其余设置相同:

  1. 为第二个帐户创建一个新的SSH密钥 ssh-keygen -t rsa -f ~/.ssh -f ~/.ssh/custom_id_rsa

  2. 使用您的其他帐户登录github,转到https://github.com/settings/keys,然后粘贴以下内容~/.ssh/custom_id_rsa.pub

  3. 确保您使用的是SSH而不是HTTPS作为远程URL: git remote set-url origin git@github.com:upstream_project_teamname/upstream_project.git



0

与其他答案不同,在其他情况下,您需要遵循几个步骤来使用同一台机器上的两个不同的 github帐户,对我来说,它需要两个步骤

您只需要:

1)为您的每个帐户生成SSH公钥和私钥对~/.ssh使用不同的名称和位置,

2)将生成的公钥添加到>> >>下的相应帐户中SettingsSSH and GPG keysNew SSH Key

要生成SSH公钥和私钥对,请使用以下命令:

cd ~/.ssh
ssh-keygen -t rsa -C "email@work.com" -f "id_rsa_WORK"
ssh-keygen -t rsa -C "email@gmail.com" -f "id_rsa_PERSONAL"

由于上述命令的结果,id_rsa_WORKid_rsa_WORK.pub文件系统就会为您创建工作帐户(例如- git.work.com),并id_rsa_PERSONALid_rsa_PERSONAL.pub您将创建个人帐户(例如- github.com)。

创建完成后,请复制每个公众的内容(*.pub)文件中,并对每个帐户执行步骤2。

PS~/.ssh/config如果两个帐户的主机名不同,则不必为文件中的每个git帐户创建主机条目,如其他答案所述。


如何在本地PC上的两个帐户之间切换?
user4015990

1
无需切换。每当您在本地克隆存储库时,git会将帐户信息保存在本地存储库中。因此,每当您在本地回购中执行git push或pull时,上述配置都会检测要考虑的帐户。
Sahil Chhabra

0

如果您恰好安装了WSL,则可以有两个单独的git帐户-一个在WSL上,一个在Windows中。


0

您应该并且一定不要使用某些通用凭据来推送项目。在新机器上启动后,请按照以下步骤设置并正确使用您的gitlab凭据:

  • 在机器上创建公共/私人ssh密钥
  • 复制将公钥粘贴到gitlab / github ui界面(任何通过cmd线提示操作方法的人都将获得免费的啤酒...)
  • 确保您通过git而不是http url克隆存储库
  • 设置git别名,以避免不断在git命令中键入相同的前缀
  • 在git commit期间,始终使用作者和电子邮件标志
  • 像往常一样使用git

所有这一切如下:

 # create the public / private key credentials on that specific machine
 ssh-keygen -t rsa -b 4096 -C "<<you>>@org.net" -f ~/.ssh/id_rsa.<<you>>.`hostname -s`

 # setup your public key in the gitlab ui 
 cat ~/.ssh/id_rsa.<<you>>.`hostname -s`

 # make sure you clone the repo via the git and not http url
 git clone git@git.in.org.net:org/some-repo.git

 # set the git alias to avoid constant typing of the repeating prefix to the git cmd
 alias git='GIT_SSH_COMMAND="ssh -i ~/.ssh/id_rsa.<<you>>.`hostname -s`" git'

 # during git commit ALWAYS use the author and e-mail flags
 git add --all ; git commit -nm "$git_msg" --author "YourFirstName YourLastName <you@phz.fi>"

 # use git as normal
 git fetch --all; git pull --all 

0
  1. 导航到要将更改推送到另一个GitHub帐户的目录。
  2. 在终端/命令行中创建一个新的SSH密钥。

    ssh-keygen -t rsa -C“您的电子邮件地址”

  3. 然后将显示以下内容:

    生成公共/私有rsa密钥对。输入要在其中保存密钥的文件(/home/your_username/.ssh/id_rsa):

复制并粘贴路径,后跟文件的可识别名称:

/home/your_username/.ssh/id_rsa_personal

4)然后会要求您提供以下信息:

Enter passphrase (empty for no passphrase):
Enter same passphrase again:

5)现在,您可以键入以下命令以查看本地计算机上的所有SSH密钥:

ls -al ~/.ssh

您应该能够看到新的SSH密钥文件。如您所见,我同时拥有id_rsa_test和id_rsa_personal.pub。

drwx------  2 gmadmin gmadmin 4096 Nov 16 22:20 .
drwxr-xr-x 42 gmadmin gmadmin 4096 Nov 16 21:03 ..
-rw-------  1 gmadmin gmadmin 1766 Nov 16 22:20 id_rsa_personal
-rw-r--r--  1 gmadmin gmadmin  414 Nov 16 22:20 id_rsa_personal.pub
-rw-r--r--  1 gmadmin gmadmin  444 Nov  6 11:32 known_hosts

6)接下来,您需要复制存储在id_rsa_personal.pub文件中的SSH密钥。您可以在自己选择的文本编辑器中打开它。我当前正在使用原子,因此我使用以下命令打开了文件:

atom ~/.ssh/id_rsa_personal.pub

然后,您将获得类似于以下内容的信息:

ssh-rsa AAB3HKJLKC1yc2EAAAADAQABAAABAQCgU5 + ELtwsKkmcoeF3hNd7d6CjW + dWut83R / Dc01E / YzLc5ZFri18doOwuQoeTPpmIRVDGuQQsZshjDrTkFyNcWH1MKHWMM7L

7)复制并导航到您的GitHub帐户→设置→SSH和GPG密钥8)单击新建SSH密钥。复制密钥,为其命名并添加。9)从终端添加密钥

ssh-add ~/.ssh/id_rsa_personal
Enter passphrase for /home/your_username/.ssh/id_rsa_personal: 

10)配置用户和密码。

git config --global user.name "gitusername"
git config --global user.email "gitemail"

11)我们现在准备提交并推动。

git init
git add .
git commit 
git push

0

如果您已经创建或克隆了另一个存储库,但无法从origin或中提取upstream使用以下命令从该目录中添加ssh密钥。

这是我在这里遇到的错误:

Warning: Permanently added the RSA host key for IP address '61:fd9b::8c52:7203' to the list of known hosts.
Permission denied (publickey).
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.

我使用了以下命令,这有效:

ssh-add ~/.ssh/id_rsa_YOUR_COMPANY_NAME

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.