Git关联远程仓库
前面我们介绍的所有操作都是在本地仓库完成的,本文我们主要来看看如何和远程仓库进行交互,为了方便起见,这里远程仓库我们选择GitHub。
本文是Git系列的第五篇,了解前面的文章有助于更好的理解本文:
配置SSH KEY
SSH KEY的配置不是必须的,不配置的话我们就只能使用HTTPS协议,这样每次提交时要输入用户名密码,略麻烦,所以还是配置一下。配置SSH KEY的原理很简单,采用非对称加密方式生成公钥和私钥,公钥告诉GitHub,私钥留在自己电脑上(私钥不可泄露),当我们向GitHub上提交数据时,GitHub会用我们留给它的公钥加密一段消息返回给我们的电脑,如果我们能够用私钥解密成功,说明是合法的用户,这样就避免我们输入用户名密码了。大致的原理就是这样,现在很多免登录的系统都采用了这种方式,比如Hadoop免登录配置也是这样。那我们就来看看这个SSH KEY要怎么生成。
1.查看本地是否已有SSHKEY
查看当前用户目录下是否有.ssh文件,如下:
如果查看之后有结果,则直接跳转到第四步,什么都没有就继续生成。
2.生成SSH指纹
生成SSH指纹的命令很简单,如下:
ssh-keygen -t rsa -b 4096 -C "你的邮箱地址"
注意邮箱地址要替换。
3.添加ssh到ssh-agent中
执行如下命令即可:
eval "$(ssh-agent -s)"
OK,做好这一切之后,我们当前用户目录下已经有了一个名为.ssh的隐藏文件夹了,打开这个目录,会发现有一个名为id_rsa.pub的文件,这就是我们一会要使用的公钥文件。
4.将公钥告诉GitHub
登录GitHub,点击右上角的向下的箭头,选择Settings,在新打开的页面中左边侧栏选择SSH and GPG keys,如下:
完了之后点击最下面的Add SSH key按钮即可,如此之后,我们的SSH KEY就配置成功了。
创建远程仓库
接下来我们在GitHub上创建一个仓库,登录成功之后,直接点击右上角绿色的New repository按钮,如下:
其实这里我们只需要填一个版本仓库的名字,我填了test,填好之后,点击Create repository就OK了。
关联远程仓库
创建成功之后,我们会看到仓库的地址,如下:git@github.com:lenve/test.git
,然后我需要将我们之前的本地仓库和这个远程仓库进行关联,使用git remote add命令,如下:
$ git remote add origin git@github.com:lenve/test.git
在这条命令中,git会自动将远程仓库的名字设置为origin,方便我们的后续操作。
推送到远程仓库
推送到master分支
假设我想将本地master分支上的内容推送到远程master分支上,方式如下:
$ git push -u origin master
-u参数可以在推送的同时,将origin 仓库的master 分支设置为本地仓库当前分支的upstream(上游)。添加了这个参数,将来运行git pull命令从远程仓库获取内容时,本地仓库的这个分支就可以直接从origin 的master 分支获取内容,省去了另外添加参数的麻烦。这个参数也只用在第一次push时加上,以后直接运行git push命令即可。
推送到其他分支
如果想推送到其他分支,还是这条命令,修改一下分支的名字即可,比如我也想把我的fa分支推送到远程仓库中,执行如下命令:
$ git checkout fa
$ git push -u origin fa
先切换到fa分支,然后执行git push命令,参数含义和之前的一样,这里我们创建的远程仓库的分支名也为fa(当然我们可以取任何名字,但是为了不混淆,最好取一致的名字)。这两条命令执行成功之后,此时在网页中我们就可以看到已经有多个分支了,如下:
从远程仓库获取
首次获取
刚刚是我们向远程仓库提交数据,有提交当然就有获取,我们可以通过git clone命令克隆一个远程仓库到本地,方式也简单,在本地创建一个空文件夹,执行如下命令:
$ git clone git@github.com:lenve/test.git
表示克隆文件到本地仓库。此时克隆的远程仓库的master分支到本地仓库,我们可以通过git branch -a来查看本地仓库和远程仓库的信息,-a参数可以同时显示本地仓库和远程仓库的信息,如下:
我们看到远程仓库中已经有了fa分支了,如果我们想把fa分支也克隆下来,执行如下命令:
$ git checkout -b fa origin/fa
表示根据远程仓库的fa分支创建一个本地仓库的fa分支,创建完成之后进行切换,也可以通过如下命令只创建不切换:
$ git branch fa origin/fa
此时我在fa分支下修改git01.txt文件并提交,如下:
注意由于fa分支就是从远程仓库克隆下来的,所以这里可以不添加-u参数。
从远程仓库更新
此时我们回到第一次最早的那个test本地仓库中,那个test仓库的fa分支现在和远程仓库不一致了,我们可以通过git pull命令来更新,如下:
Ok,关联远程仓库我们先说这么多。有问题欢迎留言讨论。
参考资料:
1.《GitHub入门与实践》 2.《Pro Git》
- 读写文件具体操作
- 【算法】赫夫曼树(Huffman)的构建和应用(编码、译码)
- ERROR 1396 (HY000): Operation CREATE USER faile...
- hive安装后测试
- 【算法】论平衡二叉树(AVL)的正确种植方法
- 【JavaScript】 JS面向对象的模式与实践
- log4j:ERROR Failed to load driver
- 前端MVC Vue2学习总结(七)——ES6与Module模块化、Vue-cli脚手架搭建、开发、发布项目与综合示例
- 前端MVC Vue2学习总结(六)——axios与跨域HTTP请求、Lodash工具库
- spring之config.xml完整版示例
- 前端MVC Vue2学习总结(五)——表单输入绑定、组件
- 【HCTF】2017部分Web出题思路详解
- 前端MVC Vue2学习总结(四)——条件渲染、列表渲染、事件处理器
- 如何移除Android应用广告
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- java之匿名内部类
- springboot配置之获取配置文件中属性的第二种方法(@Value)不同于@ConfigurationProperties
- mybatis动态sql之内置参数_parameter和_databaseId
- Redis | Redis 字符串相关命令
- java之抽象类
- springboot配置之yaml
- properties和yaml配置文件
- java之模板方法设计模式
- java之接口
- PHP 代码混淆处理思路
- java之工厂方法设计模式
- springboot开发之使用外部servlet容器及对jsp的支持
- java之内部类
- 关于我博客中的猫是怎么设置的说明
- LeetCode | 2.两数相加