【问题标题】:Multiple GitHub accounts on the same computer?同一台计算机上有多个 GitHub 帐户?
【发布时间】:2011-04-21 01:56:19
【问题描述】:

尝试从我的计算机上处​​理我的实际“工作”存储库和 git hub 上的存储库。

首先设置了工作帐户,一切正常。

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

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

如何从两个帐户各自的 GitHub 凭据推送/拉取两个帐户?

【问题讨论】:

标签: git version-control github


【解决方案1】:

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

第一个链接中的相关步骤:

  1. 生成一个 SSH 密钥 ssh-keygen -t rsa -C "john@doe.com",按照提示确定一个名称,例如id_rsa_doe_company
  2. 将 SSH 公钥从 ~/.ssh/id_rsa_doe_company.pub 复制到 GitHub,并将密钥告诉 ssh:ssh-add ~/.ssh/id_rsa_doe_company
  3. ~/.ssh中创建一个config文件,内容如下:
    Host github-doe-company
      HostName github.com
      User git
      IdentityFile ~/.ssh/id_rsa_doe_company
    
  4. 添加您的遥控器git remote add origin git@github-doe-company:username/repo.git 或使用git remote set-url origin git@github-doe-company:username/repo.git 更改

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

设置用户名、电子邮件和 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 在 cmets 中通知我。

【讨论】:

  • 第三个链接现在已损坏(多个 SSH 密钥)
  • 第一个链接现在重定向到用户与组织帐户的页面(不确定这是否是最初的意图)。 this tutorial 很容易理解并解决了我的问题。
  • @AlmasAdilbek 现在已经快 3 年了,链接肯定会断开并继续断开。想找一篇替代文章或再次找到原始来源,这样你就可以为我更新链接了,伙计?我不能永远修复损坏的链接。
  • 如果没有总结您实际帖子中的关键步骤,这不是一个答案。此答案已经遭受过一次链接失效,但尚未进行必要的更新以提供对该问题的实际答案。
  • 您可能需要添加的重要警告:如果您的电子邮件不同,您推送的任何提交仍将显示为由您在.gitconfig 中设置的电子邮件提交。解决方案是git config user.email youremail@email.com,它在本地为特定的 Git 存储库更改它,或者您可以使用条件自动更改您的配置电子邮件,具体取决于您所在的文件夹。来源和操作方法:stackoverflow.com/a/43654115/920920
【解决方案2】:

我使用 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),否则它不会构建我的项目:

Run Script 放在 Dependencies 之后(使用 /bin/ksh 作为 shell):

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
  • 这是一场噩梦。如果有人在知道他们的 id_rsaid_rsa.pub 密钥将被删除之前运行此脚本,他们可能会被锁定在遥控器之外。
  • @naomik 更新了脚本以首先检查新文件,并将旧文件保存在 /tmp
【解决方案3】:

通过在 ~/.ssh/config 中为 github.com 创建不同的主机别名, 并为每个主机别名提供自己的 ssh 密钥,您可以轻松地使用多个 github帐户没有混淆。 那是因为 github.com 不是按用户来区分的,它总是只是 git, 但是通过您用来连接的 ssh 密钥。 只需使用您自己的主机别名配置您的远程源。”

以上摘要由以下博客文章中的 cmets 提供。

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

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

【讨论】:

【解决方案4】:

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

【讨论】:

  • 我还要注意,在执行克隆(可能还有其他命令)如git clone git@github-COMPANY/repo/name.git 时,需要使用“github.com”或“github-COMPANY”来获取正确的 ssh 密钥.
  • @dtan:如果我必须通过 https 进行克隆,我将如何实现这一点? git clone https://github-COMPANY/GitUserName/projectname.git 似乎不起作用。使用 github.com 的默认密钥可以正常工作。
  • @IsaacRemuant,你一定要通过 https 吗?每次您想要拉/推时,您都必须输入您的用户凭据。如果你能做 git://github-COMPANY...projectname.git 会更好。 https 调用是否有任何错误消息?
  • @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 调用的方式有关。
  • 最终,我会尝试一切进行深入分析,并将其作为问题适当发布。
【解决方案5】:

我发现这个 gem 非常有用:sshwitch

https://github.com/agush22/sshwitch
http://rubygems.org/gems/sshwitch

它有助于切换 ssh 密钥。记得先备份一切!

此外,为了确保提交具有与其关联的正确电子邮件地址,我确保 ~/.gitconfig 文件具有正确的电子邮件地址。

【讨论】:

    【解决方案6】:

    使用 HTTPS:

    将远程网址更改为 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
    

    【讨论】:

    • 这个解决方案提供了最简单的方法,因为我不想添加更多的 ssh 密钥。请注意,如果您已经使用--global 标志设置了user.nameuser.email,只需按照他上面所说的方法在本地为那个repo 设置它。这解决了很多麻烦。现在删除旧的回购......
    • 用 ssh 或 git 协议代替 https 怎么样?
    • 已于 2021 年 8 月 13 日移除对密码身份验证的支持。
    【解决方案7】:

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

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

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

    【讨论】:

      【解决方案8】:

      塑形

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

      但在我们开始使用您的第二个身份推送/拉取 repos 之前,我们必须让您适应 - 假设您的系统设置有典型的 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
      

      接下来,让我们 generate a new key pair - 这里我将新密钥命名为 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 文件来定义我们的关键配置。我们将使用proper owner-read/write-only permissions 来创建它

      $ (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 <b>github.com-otheruser</b>:someorg/somerepo.git

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


      完成工作:创建新的存储库

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

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

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

      现在配置这个 repo 使用你的identity

      $ 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

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

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

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

      最后推送repo

      $ git push origin master
      

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

      假设您已经克隆了一些 repo,但现在您想使用新的 SSH 配置。在上面的示例中,我们通过将您以前的 id_rsa/id_rsa.pub 密钥对分配给您的 SSH 配置文件中的 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
      

      所以我们现在将其更新为(bold 中的更改)

      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 配置,请使用 set-url 更新存储库的远程源字段 -

      $ cd existingrepo
      $ git remote set-url origin github.com-mainuser:someuser/existingrepo.git
      

      就是这样。现在你可以push/pull尽情享受


      SSH 密钥文件权限

      如果您的公钥无法正常工作,SSH 对您的file permissions 目录和相应的密钥文件允许的file permissions 非常严格

      根据经验,任何目录都应该是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 密钥,这样如果任何一个密钥被泄露,我就不必在我使用过该密钥的所有其他地方更新密钥。这就像当您从 Adob​​e 收到通知说他们的 1.5 亿用户信息被盗时 - 现在您必须取消该信用卡并更新依赖它的所有服务 - 多么令人讨厌。

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

      $ tree ~/.ssh
      /Users/myuser/.ssh
      ├── another.site
      │   ├── myuser.pem
      ├── config
      ├── github.com
      │   ├── myuser.pem
      │   ├── someusername.pem
      ├── known_hosts
      ├── somedomain.com
      │   ├── someuser.pem
      └── someotherdomain.org
           └── root.pem
      

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

      Host another.site
        User muyuser
        IdentityFile ~/.ssh/another.site/muyuser.pem
      
      Host github.com-myuser
        HostName github.com
        User git
        IdentityFile ~/.ssh/github.com/myuser.pem
      
      Host github.com-someuser
        HostName github.com
        User git
        IdentityFile ~/.ssh/github.com/someusername.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/root.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 -&gt; github-mainuserid_rsa.pub -&gt; 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==
      

      【讨论】:

      • 我知道这是一个老问题,但这并不能原谅这里几乎每个答案都依赖于某个教程的链接,因此会受到链接腐烂的影响。链接来源/引文很好,但如果您不总结此处发布的答案中的关键部分,则不能依赖链接。
      • 我赞成您出色而详细的答案,因为它显然是正确的方法。我的问题是它很复杂,在使用一些帐户几年后,我得到了一个新帐户,然后不记得如何“以正确的方式”进行操作。我下面的方法非常简单——我只创建了 3 个新文件和一个新脚本,就可以开始了。多年来,它对我来说完美无缺。读者可以决定什么最适合他们。
      • DavidH 我很欣赏你的评论。如果你把它作为一个整体,答案确实会感觉很复杂,但是如果读者的唯一目标是添加另一个 github 身份,那么他们真的只需要关心他/她自己的一小部分答案——所有剩下的部分answer 旨在为您设置一个强大的解决方案来管理一般的 SSH 密钥,并且是完全可选的。
      • 我认为git clone github.com-otheruser:someorg/somerepo.git 需要是git clone git@github.com-otheruser:someorg/somerepo.git(添加git@)。至少,这正是我所需要的。
      • @CommonsWare 所有命令行选项,例如指定用户,也可以在 SSH 配置中完成。例如:Host github.com(换行)User git(换行)IdentityFile ...
      【解决方案9】:

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

      1. 检查现有的 ssh 密钥: 打开终端并运行此命令以查看/列出现有的 ssh 密钥 ls -al ~/.ssh
        扩展名为 .pub 的文件是您的 ssh 密钥,所以personalwork 帐户应该有两个。如果只有一个或没有,则生成其他明智的跳过此。

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

        正在生成公钥/私钥对。
        输入保存密钥的文件 (/.../.ssh/id_rsa):


        id_rsa 是即将生成的 ssh 密钥的默认名称所以复制路径并重命名默认值,例如/.../.ssh/id_rsa_work 如果为工作帐户生成。提供密码或直接输入忽略,您会看到类似 Key's randomart image is: 和图像。完成。
        再次为您的第二个 github 帐户重复此步骤。确保使用正确的电子邮件地址和不同的 ssh 密钥名称(例如 id_rsa_personal)以避免覆盖。
        在此阶段,再次运行 ls -al ~/.ssh 时应该会看到两个 ssh 密钥。
      2. 将 ssh 密钥与 gitHub 帐户关联: 下一步是复制其中一个 ssh 密钥,运行此命令,但替换您自己的 ssh 密钥名称:pbcopy &lt; ~/.ssh/id_rsa_work.pub,将 id_rsa_work.pub 替换为您自己的名称。现在我们的 ssh 密钥已复制到剪贴板,返回 github 帐户 [如果您复制的 ssh 密钥是 id_rsa_work,请确保您已登录工作帐户] 并导航至
        设置 - SSH 和 GPG 密钥 并点击 New SSH 密钥 按钮(不是 New GPG 密钥 btw :D)
        给这个密钥一些标题,粘贴密钥并单击添加 SSH 密钥。您现在要么成功添加了 ssh 密钥,要么注意到它一直存在,这很好(或者您收到错误,因为您选择了 New GPG key 而不是 New SSH key时间>: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

      完成!,现在当尝试从 repo 推送或拉取时,系统会询问您应该将哪个 GitHub 帐户与此 repo 链接,并且只询问一次,本地配置将记住此链接,而不是全局配置,所以您可以处理与不同帐户链接的不同存储库,而无需每次都编辑全局配置。

      【讨论】:

      • 他们应该允许标签作为答案,这是针对 mac OS 的。
      【解决方案10】:
      • 转到 ~/.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 中使用密码,但您可能必须输入密码才能进行身份验证。
      【解决方案11】:

      更简单易行的修复以避免混淆..

      供 Windows 用户为不同的项目使用多个或不同的 git 帐户。

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

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

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

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

      【讨论】:

        【解决方案12】:

        您不必为个人和工作维护两个不同的帐户。事实上,Github 建议您维护一个帐户并帮助您合并两者。

        如果您决定不需要维护多个帐户,请按照以下链接进行合并。

        https://help.github.com/articles/merging-multiple-user-accounts/

        【讨论】:

          【解决方案13】:

          与其他答案不同,您需要按照 几个步骤 使用同一台机器上的 两个不同 github 帐户,对我来说它适用于两步

          你只需要:

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

          2) 将生成的public密钥添加到Settings>>SSH and GPG keys>>New 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 帐户创建主机条目,如其他答案中所述。

          【讨论】:

          • 如何在本地电脑上切换两个账户?
          • 无需切换。每当您在本地克隆存储库时,帐户信息将由 git 保存在本地存储库中。因此,每当您在该本地存储库中执行 git push 或 pull 时,上述配置都会检测到要考虑的帐户。
          【解决方案14】:

          另一种更简单的方法是使用多个桌面应用程序,就像我正在做的那样,在 Github 桌面上使用帐户 A,而在 Github Kraken 上使用帐户 B

          【讨论】:

            【解决方案15】:

            如果您碰巧安装了WSL,您可以拥有两个单独的 git 帐户 - 一个在 WSL 上,一个在 Windows 上。

            【讨论】:

              【解决方案16】:

              最简单直接的方法(恕我直言) - 没有配置文件,没有太多麻烦

              只需创建另一个 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>
              

              【讨论】:

                【解决方案17】:

                刚刚为 Windows 解决了这个问题,使用每个 repo 的凭据:

                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 存储一个凭证。如果包含它,那么凭据管理器将存储多个凭据,这正是我真正想要的。

                【讨论】:

                  【解决方案18】:

                  IntelliJ Idea 内置了对它的支持 https://www.jetbrains.com/help/idea/github.html#da8d32ae

                  【讨论】:

                    【解决方案19】:

                    您应该也不能使用一些通用凭据推送到项目。在新机器上启动后,请按照以下步骤正确设置和使用您的 gitlab 凭据:

                    • 在机器上创建公共/私有 ssh 密钥
                    • 将公钥复制粘贴到 gitlab/github ui 界面(通过 cmd 行提示操作方法的任何人都可以获得免费啤酒...)
                    • 确保通过 git 而不是 http url 克隆 repo
                    • 设置 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 
                    

                    【讨论】:

                      【解决方案20】:

                      如果您不想弄乱此处提到的 ~/.ssh/config 文件,您可以改为在要从其他帐户提交的 repo 中运行 git config core.sshCommand "ssh -i ~/.ssh/custom_id_rsa"

                      其余设置相同:

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

                      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

                      【讨论】:

                      • 谢谢!这比配置教程简单。在我的情况下,配置文件无论如何都不起作用,但这个直接解决方案确实起作用。点赞+评论,希望其他人在放弃阅读之前能找到这个答案。
                      【解决方案21】:
                      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,所以我使用以下命令打开了文件:

                      atom ~/.ssh/id_rsa_personal.pub
                      

                      然后你会得到类似这样的东西:

                      ssh-rsa AAB3HKJLKC1yc2EAAAADAQABAAABAQCgU5+ELtwsKkmcoeF3hNd7d6CjW+dWut83R/Dc01E/YzLc5ZFri18doOwuQoeTPpmIRVDGuQQsZshjDrTkFy8rwKWMlXl7va5olnGICcpg4qydEtsW+MELDmayv

                      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
                      

                      【讨论】:

                        【解决方案22】:

                        如果您已经创建或克隆了另一个存储库,并且无法从 originupstream 中提取,则使用以下命令在该目录中添加 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

                        【讨论】:

                          【解决方案23】:

                          使用个人访问令牌的个人目录.gitconfig

                          如果您不想修改主机文件、使用 SSH 密钥或为每个 repo 设置一个.gitconfig,那么您可以使用基本上包含在根级别配置中的个人.gitconfig。给定一个 OSX 目录结构,如

                          # root level git config
                          ~/.gitconfig
                          
                          # your personal repos under some folder like
                          ../personal/
                          ../home/
                          ~/Dropbox/
                          

                          在您的个人文件夹中添加.gitconfig,例如~/Dropbox/.gitconfig

                          [user]
                              email = first.last@home.com
                              name = First Last
                          [credential]
                              username = PersonalGithubUsername
                              helper = osxkeychain
                          

                          在您的根级别.gitconfig 添加一个includeIf 部分以在您位于个人目录中时获取您的个人配置。只要includeIf 出现在您要覆盖的设置之后,那里的任何设置都会覆盖根配置。

                          [user]
                              email = first.last@work.com
                              name = "First Last"
                          [credential]
                              helper = osxkeychain
                          [includeIf "gitdir:~/Dropbox/**"]
                              path = ~/Dropbox/.gitconfig
                          

                          尝试推送到您的个人仓库或从您的私人仓库中提取

                          git push
                          # prompts for password
                          

                          当出现提示时,输入您的个人密码,或者更好的是,输入您在 account developer settings 中创建的个人访问令牌。输入该令牌作为您的密码。

                          假设您已经在使用git-credential-osxkeychain,您的个人凭据应存储在您的钥匙串中,因此将显示两个github 条目,但使用不同的帐户。

                          【讨论】:

                            【解决方案24】:

                            选项 0:您不想弄乱操作系统设置。您只想为一个 repo 提交具有不同公钥的不同 github 帐户。

                            解决方案

                            1. 创建新密钥:ssh-keygen -t rsa -b 4096 -f ~/.ssh/alt_rsa

                            2. 将密钥添加到密钥集中:ssh-add -K ~/.ssh/alt_rsa

                            3. 复制 pub key 并将其添加到 github 帐户:(请参阅 github 说明)

                            4. 用 github 测试密钥:ssh -i ~/.ssh/alt_rsa T git@github.com

                            5. 使用 git 协议(不是 HTTP)克隆 repo:git clone git@github:myaccount...

                            6. 在克隆的仓库中:

                              git config core.sshCommand "ssh -i ~/.ssh/alt_rsa -F /dev/null"
                              git config user.name [myaccount]
                              git config user.email [我的帐户电子邮件]

                            7. 现在你应该能够正确地 git push 而不会干扰你的日常 git 帐户

                            【讨论】:

                              【解决方案25】:

                              让我的私人仓库使用 SSH 密钥对工作。这是在 git for Windows 上测试的。

                              来源:https://docs.github.com/en/free-pro-team@latest/github/authenticating-to-github/generating-a-new-ssh-key-and-adding-it-to-the-ssh-agent

                              A.生成公钥和私钥对

                              1. 启动 git bash
                              2. 运行ssh-keygen -t ed25519 -C "your_email@example.com"
                              3. 当系统提示您“输入保存密钥的文件”时,按 Enter 接受默认值。
                              4. 按 Enter 键输入空白密码。
                              5. 启动ssh代理:eval $(ssh-agent)
                              6. 将私钥添加到 ssh 代理并存储密码:ssh-add ~/.ssh/id_ed25519

                              B.将 SSH 密钥添加到 GitHub 帐户

                              1. 将公钥复制到剪贴板:clip &lt; ~/.ssh/id_ed25519.pub
                              2. 在 GitHub 上,转到 Profile -> Settings -> SSH Keys -> New SSH Key
                              3. 给一个标题。例如。 “MacBook Pro 上的 Windows”
                              4. 粘贴密钥并点击“添加 SSH 密钥”。

                              C.测试 SSH 连接

                              1. 输入:ssh -T git@github.com
                              2. 点击“是”查看任何警告消息。
                              3. 应该显示:“Hi username!...”表示测试成功。

                              D.设置本地存储库以使用 SSH 密钥

                              1. 更改电子邮件和用户名:
                              git config user.email your_email@example.com
                              git config user.name github_username
                              
                              1. 更新远程链接以使用 git。首先列出远程 URI:
                              git remote -v
                              git remote set-url origin git@github.com:github_username/your-repo-name.git
                              

                              E.测试

                              git remote show origin
                              

                              【讨论】:

                                【解决方案26】:

                                在一台 Windows 机器上管理多个 GitHub 帐户 (HTTPS)

                                假设您之前在您的机器上使用过 git 并配置了 git 全局配置文件。要检查它,请打开终端并:

                                git config --global -e
                                

                                它会打开您的编辑器,您可能会看到如下内容:

                                [user]
                                    email = yourEmail@gmail.com
                                    name = Your_Name
                                ...
                                

                                这很棒,因为您可以将代码推送到 GitHub 帐户,而无需每次都输入凭据。 但是如果它需要从另一个账户推送回购呢?在这种情况下,git 将拒绝 403 err,并且您必须更改您的全局 git 凭据。为了让这个舒适的 lat 集在凭证管理器中存储一个 repo 名称:

                                git config --global credential.github.com.useHttpPath true
                                

                                再次检查它打开配置 git config --global -e 你会看到新的配置行

                                [credential]
                                    useHttpPath = true
                                ...
                                

                                就是这样。现在,当您第一次推送到任何帐户时,您将看到一个弹出窗口 截图_1

                                输入特定于该回购帐户的凭据,这将“绑定”该回购帐户。因此,在您的机器中,您可以指定任意数量的帐户/存储库。

                                有关更详细的解释,您可以观看我在 youtube 上找到的这个很酷的视频: https://youtu.be/2MGGJtTH0bQ

                                【讨论】:

                                  【解决方案27】:

                                  将 github 中的身份验证方法从 SSh 更改为 HTTP。这样,它就不会关心您是否使用您的工作 github 帐户登录并尝试与您的个人 github 帐户进行远程交互(该帐户的凭据与您当前登录到本地计算机的凭据不同)。

                                  【讨论】:

                                    【解决方案28】:

                                    可能有多种方法可以做到这一点,但以下解决方案对我有用,而且非常简单。 我不想使用 SSH,我的步骤和解决方案基于 HTTPS

                                    1. 在本地计算机上创建项目 DIR。示例 d:\test_git_multiple_account

                                    2. 转到文件夹“test_git_multiple_account”

                                    3. 在此处将一些文件添加到 DIR 中

                                    4. 在此处打开 Git bash 并运行以下命令

                                      a. git init // initialization 
                                      b. git add , // add 
                                      c. git commit -m "initial commit"
                                          you will get following output : in my case i use to add one python file created 
                                          from code.
                                          **[master (root-commit) d4defd9] initial commit
                                          2 files changed, 4 insertions(+)
                                          create mode 100644 .vscode/settings.json
                                          create mode 100644 Hello.py**
                                      
                                      d.  git remote add origin <HTTPS repo link>
                                      e.  git remote -v // check the repo version 
                                      f.  git push origin master
                                          it will ask your git hub user name and password via popup screen. 
                                          you will get the following output 
                                          Counting objects: 100% (5/5), done.
                                          Delta compression using up to 4 threads
                                          Compressing objects: 100% (3/3), done.
                                          Writing objects: 100% (5/5), 411 bytes | 31.00 KiB/s, done.
                                          Total 5 (delta 0), reused 0 (delta 0), pack-reused 0
                                          remote:
                                          remote: Create a pull request for 'master' on GitHub by visiting:
                                          remote:      https://github.com/vishvadeepaktripathi/Hello_Py/pull/new/master
                                          remote:
                                          To https://github.com/vishvadeepaktripathi/Hello_Py.git
                                           * [new branch]      master -> master
                                      

                                    这将创建一个新的分支,我在这里命名为 master。 更改分支后,您可以提交到主分支,在这种情况下,您的现有文件将被删除。因此,我建议将主分支签出到第一步,然后继续执行每个命令,以防您想直接签入主分支。 注意在首次登录时,它可能会给您一条错误消息并再次要求您输入登录名和密码,然后它将您的更改发布到 Git 中心。

                                    完成此操作后,您将在您的 github 帐户中收到有关新拉取请求的消息。 您可以将您的更改从主分支合并到主分支。

                                    我在这里创建了主分支,您根据自己的选择命名了您的分支。 附上屏幕截图。 enter image description here

                                    【讨论】:

                                      【解决方案29】:

                                      就我而言,我在 Git-Lab 中有我的工作帐户,在 GitHub 中有我的个人帐户。 我的 Git-Lab 帐户被全局配置为可以从我笔记本电脑中的所有目录访问,如下所示:

                                      git config --global user.name WORK_USERNAME
                                      git config --global user.email WORK_USERNAME@example.com
                                      

                                      因此,如果您正在寻找不使用 SSL 的解决方案,您可以在一个空文件夹中使用 git init,然后在该文件夹中插入您的个人帐户凭据:

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

                                      注意此处--global 未设置,因为您只希望从那里访问您的个人 git,而不是从任何地方访问,因此该文件夹内的任何内容都将其 git 凭据连接到您的个人帐户,而外部将被连接到您的工作帐户。

                                      之后,您可以像 git clone your_repo_link.git 那样克隆您的存储库。然后会弹出一个新窗口,要求您使用您的 github 帐户登录。

                                      要验证您的流程,请尝试在您创建的文件夹中使用git config --list,您应该会看到工作和个人用户名以及电子邮件及其目录。

                                      在该文件夹之外,如果您运行 git config --list,您应该只会看到您的工作用户名和电子邮件。

                                      就是这样,希望这对不配置 SSL 的人有所帮助。

                                      【讨论】:

                                      • 为我工作,但我在工作目录中执行config --list 时看不到工作用户名和电子邮件,但我可以看到正确的远程源地址。就我而言,我克隆了一个 GitLab 存储库,在克隆时,它提示我输入用户名和密码,所以我认为正确的 &lt;url&gt; 足以让 git 识别 GitLab 或 GitHub 存储库。就我而言,GitLab 和 GitHub 的用户名和电子邮件都不同。
                                      • 只是澄清一下,我做了 git init 并配置了名称和电子邮件地址,然后我将 gitlab repo 克隆到同一目录但在一个新文件夹中。我希望我也能在这个新文件夹中看到本地名称和电子邮件地址,但我没有。另一方面,我可以在父文件夹中看到全局和本地用户名。
                                      • 当您将文件推送到包含您的个人用户名和电子邮件的文件夹中时,它应该会打开一个新的 git 窗口,询问您的凭据。只要该文件夹中未使用--global。我认为您的主要工作 git 帐户不应该受到影响
                                      【解决方案30】:

                                      您只需将新的电子邮件 ID 添加到您的个人 git 帐户即可。这样您就不需要添加另一个 SSH 密钥。只需通过执行配置您的新电子邮件 git config --global user.email newemail。然后你就可以克隆那个 repo。

                                      【讨论】:

                                      • 不,这行不通@jatin_verma。无法使用多个用户名登录 github
                                      猜你喜欢
                                      • 1970-01-01
                                      • 1970-01-01
                                      • 1970-01-01
                                      • 2021-03-28
                                      • 1970-01-01
                                      • 2015-07-02
                                      • 2021-02-03
                                      • 2011-03-10
                                      相关资源
                                      最近更新 更多