2021-01-23
GIT简介
1.Git概念
先来说说 Git 的由来,Git 是一个版本控制软件,最初是由 Linux 之父——林纳斯·托瓦兹 为了更好的管理 Linux 内核代码而编写的。当时 林纳斯 要合并来自其他 Linux 开发者的代码,维护整个 Linux 内核,万一合并代码后出了问题,那么就需要上一个版本的代码,如果是单纯的每个版本都复制保存一份,就需要很多很多代码版本,并且对于频繁的修改,这样手动操作太繁琐了而且也容易出错,所以版本控制就显得非常的必要。
2.2.常见的版本控制软件
GIT
CVS https://www.cvs.com/international.html
3.Github
3.1.设置仓库
3.2.提供SSH2密匙
为什么要配置 密匙(秘钥)呢?
加密协议
先删除本地 .ssh 下的密匙
再删除远程仓库服务器配置好的密匙
第一次配置,这两个步骤可以省略,因为都没有
如何配置本地秘钥?
3.2.1.打开面板
Rsa => 私钥
Pub => 公钥
3.2.4.将本地秘钥配置到远程服务器
使用记事本打开 pub 公钥 复制完整的秘钥
3.3.添加秘钥
将公钥内容填写到上面文本框,标题可以随便写。
4. 如何使用git开发
使用纯命令行 https://www.cnblogs.com/chenwolong/p/GIT.html
使用Ecplise + EGIT**插件**
4.1. 安装 EGIT 插件
Eclipse Mars2 版本,默认集成 EGIT 插件,如果需要安装 EGIT 插件,可以使用在线安装方式实现
4.2.EGIT 插件参数配置
移除之前的所有配置
第一次操作不用操作,因为没有配置过
下图是添加过程:
举个栗子:一定要Key:XXX.XXX;如果没有写点,就会报错。
使用 EGIT 插件,可以提前配置一些参数,为 GIT 访问远程版本仓库提供便利
常用参数有下述 4\ 个:
- http.sslVerify=false 关闭 ssl 校验。(选填,如果未提供 SSH2\ 密匙必填)
http.sslVersion=tlsv1.2定义ssl协议版本,Github 在最近的更新中关闭了tlsv1.0 和tlsv1.1协议的访问,不提供此参数无法访问Github远程版本仓库。(必须配置)
user.email=xxx@xxx
4.user.name=xxx[n2][n2]现在不配置,后续也要弹框让你配置
* 在访问 Github 远程版本仓库的时候, Github 要求必须提供用户和电子邮箱,如果不提
供上述参数,在后续操作中需要提供对应的信息,参考下图。
4.2.1进入 Eclipse 配置面板(Window->Preferences)。
必须配置,即使现在不配置提交的一样要配置
5.Git 仓库使用
5.1.复制github仓库地址
··
5.2.打开 GIT Repositories 管理面板
5.3.创建本地版本仓库
5.3.1.输入账号和密码
5.3.2.扫描远程仓库服务器
5.3.3.远程仓库克隆到本地仓库位置[n1]
[n1]实现本地仓库和远程仓库的同步
5.3.4.观察克隆到本地的仓库
6.Git添加操作
6.1.Share Project
6.2.选择仓库地址进行提交
6.3.观察git添加后操作
6.4.GIT图标代号[n1]
[n1]* =》 修改过,但是没有更新到本地仓库
圆柱体 本地仓库 和 Ecplise本地项目 是一一对应的
? 表示:eclipse新的信息没有加到本地仓库
> 表示;本地代码没有添加到和本地仓库保持统一
6.5.将本地代码提交到本地仓库和远程仓库
6.5.1.选择commit
在项目上右击
6.5.2.选择要提交的文件和提交的描述
注意:此处由于每个Ecplise版本不一样,所以可能会有一些差别
6.5.3.选择提交选项
1)Commit => 只提交到本地仓库,而不提交到远程仓库
2)Commit and push => 提交到本地仓库 并 同步提交到 远程仓库
6.5.4.观察提交后的变化
6.5.4.1.观察本地项目代码
6.5.4.2.观察远程的仓库服务器
成功将本地仓库的项目提交到github
7.Git提交操作
7.1.新增一个方法
7.2.将新增的进行提交(commit and push)[n1]
[n1]本地仓库和远程服务器都提交
7.3观察
图标的变化。
8.Git提交2
8.1.只选择commit[n1]
[n1]只提交本地仓一份,而不去提交到远程服务器上
8.2.观察本地项目代码
如果只更新本地 (↑箭头) => 没有提交到本地
(↓箭头) => 修改过,但是没有更新到本地仓库
8.3.如何处理
8.3.1. 选择 push
8.3.2.选择推送分支
8.3.3.仔细观察
Eclipse 访问 Github 问题解决[n1]
ini 配置文件增加下述配置:
ini 配置文件位置: eclipse 安装目录*/eclipse.ini* 文件。
1 | -Dhttps.protocols=TLSv1.1,TLSv1.2 |
[n1]需要重新启动Ecplise
进阶
1. Git更新
1.1. fetch
抓取, 抓取远程的 head 信息。从远程仓库中下载 head 头信息的变更状态。没有下载真实的代码变化。
1.1.1.李四修改了代码,然后进行提交
李四先去修改代码然后再去commit and push
1.1.2.张三将最新代码拉去到本地
1.1.2.1.Fetch from upstream 和 pull 区别
fetch:之查看版本修改,不看内容
pull查看版本修改,也查看内容
1.1.2.2.测试Fetch from Upstream
1条消息变更
仅仅是下载head (下箭头 ↓ 标志)
1.2.Pull
拉取,相当于先 fetch head 再 pull code。 先下载 head 头的变更,再根据头信息的变更下载真实的代码。通常直接 pull 即可。
1.2.1.将代码变更下载到本地
观察:pull后的效果
对比张三 和李四两个人的代码效果,发现一模一样
【总结】:
Fetch:下载head
Pull :下载head和代码
2. 分支管理
为何需要分支管理?
分支管理,是 GIT 开发中的一个非常有效的团队开发策略。 多个程序员并行开发,每个程序员可以定义各自的分支,在自己的分支上开发工程。再开发结束测试完毕后,再合并到 主干工程中,一次性提交到远程。由其他程序员使用。
分支之间互不影响
2.1.创建新分支
张三删除brank-1中的 void aa(); 方法,然进行提交
李四从master主干分支下拉去最新代码
2.2.分支切换
2.3.合并分支
首先需要切换到master主分支
李四也可以去拉去一下最新的代码 pull操作
2.4.删除分支
2.4.1.删除本地分支
尽量不要删除master
删除远程分支试一试?
确定没有了吗?
思考:为何又回来了呢?
因为你删除的是head,而不是真正的远程分支
2.4.2.删除远程分支
3.冲突管理
github中有更新,必须先pull了才能push,谁先提交谁比较爽,谁后提交谁倒霉。
张三修改了一个文件
李四修改了同一个文件
张三先提交了,
然后李四再去提交
将新的内容加到head索引里面,让head中有新增的东西
另外一方 张三再去服务器重新拉取最新的 pull
4.拉取内容
4.1.拉取远程的工程
4.2.拉取远程的代码
在 Git 中, fetch 和 pull 的功能不同, fetch 是拉取远程版本库中的变化信息,是将远程
版本仓库中最新版本的 heads 头信息更新到本地版本仓库,不包含具体的内容。 pull 则是将
远程版本仓库中的 heads 和内容都更新到本地仓库。可用下述图例简单描述:
5.删除内容
5.1.删除代码 (删除文件)
另外一方李四 pull 拉取最新
拉取之前
拉取之后
5.2.删除工程
观察github
思考:为什么远程仓库没有被删除呢?
观察远程仓库 还有没有文件呢?
因为删除了本地仓库但是没有提交
Git软件
三种使用方式
1.图形窗口使用git GUI
2.命令行git bash
3.使用第三方工具
还可以直接在idea中使用Git
idea
idea中使用Git
检查idea是否与本地的git软件关联
以为之前使用eclipse已经将公钥放到github中,所以是使用idea操作github的时候就不重复之前操作
注意:不论是用什么什么工具操作github仓库都需要啊本地生成ssh公私密钥,并且将公钥放到github中
1、本地创建项目上传到github
1.在github创建一个仓库
创建完成仓库
2、在本地创建一个项目
3、将项目进行Git初始化
选择需要上传的项目为根目录
4、将项目push
到github中查看,上传成功。
2、github克隆项目下来
新建本地创建一个空文件必须没有项目,因为克隆下来的项目必须放在一个项目为空的目录中;并且新建的文件夹需要git初始化,不然没法克隆,