Git之同一台电脑如何连接多个远程仓库

一、总结

一句话总结:

1、git使用.git目录里面的内容(ssh或用户名密码)来自动和远程仓库通信

2、在不同的仓库中配置不同的.git目录,可以连接不同的github

3、远程通信在仓库,本地配置不需要:git使用.git目录里面的内容(ssh或用户名密码)来自动和远程仓库通信,而一个仓库(项目)有一个.git目录,所以git的远程通信都必须要在仓库中进行,但是本地配置的操作就不需要再仓库中了

二、Git之同一台电脑如何连接多个远程仓库

问题描述

有时候我们需要在同一台电脑上连接多个远程仓库,比如连接两个GitHub账号,那么需要两个条件。
1.生成两对 私钥/公钥,并且密钥文件命名不能重复。
2.push 到remote时区分两个账户,推送到相应的仓库。

相应配置

1.在MAC的终端中输入以下命令,查看密钥。
ls ~/.ssh

如果有 id_rsaid_rsa.pub,说明已存在一对密钥/公钥。

2.创建新的 密钥/公钥,并指定密钥名称,比如id_rsa_x(x为任意名称)
ssh-keygen -t rsa -f ~/.ssh/id_rsa_x -C "yourmail@xxx.com"

操作完成后,该目录会多出 id_rsa_xid_rsa_x.pub 两个文件。

3.在 ~/.ssh/ 文件夹下创建一个 config 文件
$ touch config
$ vim config

编辑config文件,配置不同的仓库指向不同的密钥文件。

# 第一个账号,默认使用的账号
Host github.com
HostName github.com
User git
IdentityFile ~/.ssh/id_rsa
# 第二个账号
Host second.github.com # second为前缀名,可以任意设置
HostName github.com
User git
IdentityFile ~/.ssh/id_rsa_x

原理分析
1.ssh 客户端是通过类似 git@github.com:githubUserName/repName.git ** 的地址来识别使用本地的哪个私钥的,地址中的 User 是@前面的git, Host 是@后面的github.com
2.如果所有账号的 User 和 Host 都为 git 和 github.com,那么就只能使用一个私钥。所以要对User 和 Host 进行配置,让每个账号使用自己的 Host,每个 Host 的域名做 CNAME 解析到 github.com,如上面配置中的Host second.github.com
3.配置了别名之后,新的地址就是
git@second.github.com:githubUserName/repName.git**(在添加远程仓库时使用)。
这样 ssh 在连接时就可以区别不同的账号了。

4.查看SSH 密钥的值,分别添加到对应的 GitHub 账户中
$ cat id_rsa.pub
$ cat id_rsa_x.pub

把这两个值分别 copy 到 GitHub 账号中的 SSH keys 中保存。

5.清空本地的 SSH 缓存,添加新的 SSH 密钥 到 SSH agent中

先执行 ssh-agent bash

执行下面两条时要先执行 

cd ~/.ssh
进入当前用户根目录下的隐藏目录 .ssh
$ ssh-add -D
$ ssh-add id_rsa
$ ssh-add id_rsa_x

最后确认一下新密钥已经添加成功

$ ssh-add -l
6.测试 ssh 链接
ssh -T git@github.com
ssh -T git@second.github.com
# xxx! You’ve successfully authenticated, but GitHub does not provide bash access.
# 出现上述提示,连接成功
7.取消 git 全局用户名/邮箱的设置,设置独立的 用户名/邮箱
# 取消全局 用户名/邮箱 配置
$ git config --global --unset user.name
$ git config --global --unset user.email
# 进入项目文件夹,单独设置每个repo 用户名/邮箱
$ git config user.email "xxxx@xx.com"
$ git config user.name "xxxx"

查看git项目的配置

git config --list
8.命令行进入项目目录,重建 origin (whatever 为相应项目地址)
$ git remote rm origin
# 远程仓库地址,注意Host名称
$ git remote add origin git@second.github.com:githubUserName/repName.git
$ git remote -v # 查看远程
10.远程 push 测试

首先在 GitHub 上新建一个名为 testProj 的远程仓库,然后再在本地建一个本地仓库。

$ cd ~/documnts
$ mkdir testProj

1.进入 testProj 文件夹,创建 REDME.md文件
2.初始化此文件夹为git
3.添加并提交README.md到Git本地仓库
4.添加远程仓库
5.把README.md推送到远程仓库

$ cd testProj
$ echo "# ludilala.github.io" >> README.md
$ git init
$ git add README.md
$ git commit -m "first commit"
# 如果前面已添加远程连接,就无需再次添加
$ git remote add origin https://github.com/ludilalaa/ludilala.github.io.git
$ git push -u origin master
 
 
 
 
 

 
 
 
 

Git之同一台电脑如何连接多个远程仓库的更多相关文章

  1. Git之同一台电脑连接多个远程仓库

    问题描述 有时候我们需要在同一台电脑上连接多个远程仓库,比如连接两个GitHub账号,那么需要两个条件. 1.生成两对 私钥/公钥,并且密钥文件命名不能重复. 2.push 到remote时区分两个账 ...

  2. git的详细使用,项目创建到同步远程仓库,版本回退,忽略文件,分支创建,分支合并,分支名称修改,冲突解决,项目迁移

    注意:此处省略git的安装 1..git的工作流程示意图: 2.本地仓库的初始化: 2.1 创建一个文件夹,如我创建的是:D:\gitdemo\shop 2.2 进入shop目录,鼠标右键,打开git ...

  3. git本地创建新分支并推送到远程仓库

    1,在当前项目目录,从已有的分支创建新的分支(如从master分支),创建一个dev分支 git checkout -b dev 2,创建完可以查看一下,分支已经切换到dev git branch * ...

  4. 【Git】一台电脑与多个分布式版本管理平台连接

    六. 一台电脑与多个版本控制平台 1. 一台电脑同时通过ssh连接github和码云gitee 打开git bash 进入.ssh cd ~/.ssh 分别生成两个平台的公钥和私钥 $ ssh-key ...

  5. pycharm + git实现两台电脑代码同步

    说明:此篇文章是作者方便日后查阅所有,请不要按本文的方法搭建 1.下载msysygit,https://git-for-windows.github.io/ 点击download获取下载链接,可能由于 ...

  6. git一个本地仓库连接多个远程仓库

    前言:由于公司的GIT是内网服务器,而在家工作访问不了内网服务器,由此想把本地仓库连接一个外网的GIT服务器(码云),方便不在公司时开发. 原文 某些场合,一个git项目需要能同时使用两个甚至多个远程 ...

  7. 本地Git连接GitLab(服务器)远程仓库

    1.简介 远程仓库是指托管在网络上的项目仓库,现在互联网上有很多项目托管平台,比如github.gitlab等.为了不公开自己项目代码,可以在自己的服务器上搭建自己的项目仓库,最常见的是搭建GitLa ...

  8. git连接不上远程仓库---visualstudio提交代码报错:no upstream configured for branch 'master'

    1,新建文件夹,在文件下下鼠标右键git bush--->git init,初始化仓库: 2,设置gitthub仓库地址:git remote add origin https://github ...

  9. git本地仓库连接同步修改远程仓库

    如何使用GIT BASH同步远程仓库 1. 新建一个目录 2. 右键GIT BASH 3. git clone git@github.com:purity12138/221701117.git (SS ...

随机推荐

  1. phalcon之视图缓存

    phalcon官方站点上的视图缓存用法根本就是不通的 现提供一种行的通的方法例如以下: public function testAction() { if( $this->view->ge ...

  2. UML学习之初步总结

    UML(Unified Modeling Language)即统一建模语言,是一种开放的方法,用于说明.可视化.构建和编写一个正在开发的.面向对象的.软件密集系统的制品的开放方法.UML展现了一系列最 ...

  3. scrapy-爬取斗图

    scrapy-爬取斗图代码   <一> 开局三连杀    1.创建run的文件  

  4. Spring MVC基础了解

    参考网址:https://www.yiibai.com/spring_mvc/springmvc_overview.html Spring框架相关 Spring Security 一个灵活强大的身份验 ...

  5. javasciprt cookies 操作

    <script type="text/javascript"> function getCookie(c_name){ if (document.cookie.leng ...

  6. PatentTips - Method and Apparatus to Support Virtualization with Code Patches

    BACKGROUND As recognized in Revision 2.0 of the Intel® Virtualization Technology Specification for t ...

  7. Altium Designer如何统一改变pcb状态下的原件标号位置

    原创 我用的是Altium Designer16版本 变成 步骤如下: 选中标号 右击 下边一步很重要: 点击应用和确定 在之后弹出的对话框中选则你要改变的位置,我这里是把标号改变到原件的右侧: 等待 ...

  8. UVA 11090 Going in Cycle!!(Bellman-Ford推断负圈)

    题意:给定一个n个点m条边的加权有向图,求平均权值最小的回路. 思路:使用二分法求解.对于每个枚举值mid,推断每条边权值减去mid后有无负圈就可以. #include<cstdio> # ...

  9. POSIX 多线程编程及理解

    最近开发基于ZYNQ的嵌入式linux程序,涉及到多线程使用,将一些内容整理如下: POSIX多线程编程最为基础和重要的可以分为两部分: 线程操作-Thread Management 线程同步-Syn ...

  10. POJ 1745 Divisibility DP

    POJ:http://poj.org/problem?id=1745 A完这题去买福鼎肉片,和舍友去买滴~舍友感慨"这一天可以卖好几百份,每份就算赚一块钱..那么一个月..一年...&quo ...