Git

2021-01-23

GIT简介

1.Git概念

先来说说 Git 的由来,Git 是一个版本控制软件,最初是由 Linux 之父——林纳斯·托瓦兹 为了更好的管理 Linux 内核代码而编写的。当时 林纳斯 要合并来自其他 Linux 开发者的代码,维护整个 Linux 内核,万一合并代码后出了问题,那么就需要上一个版本的代码,如果是单纯的每个版本都复制保存一份,就需要很多很多代码版本,并且对于频繁的修改,这样手动操作太繁琐了而且也容易出错,所以版本控制就显得非常的必要。

2.2.常见的版本控制软件

* GIT

* SVN https://tortoisesvn.net/

* CVS https://www.cvs.com/international.html

3.Github

3.1.设置仓库

image-20200814134858315

image-20200814134905415

image-20200814134912185

3.2.提供SSH2密匙

为什么要配置 密匙(秘钥)呢?

加密协议

image-20200814134946508

先删除本地 .ssh 下的密匙

再删除远程仓库服务器配置好的密匙

第一次配置,这两个步骤可以省略,因为都没有

如何配置本地秘钥?

3.2.1.打开面板

image-20200814135406544

image-20200814135559537

image-20200814135650660

Rsa => 私钥

Pub => 公钥

3.2.4.将本地秘钥配置到远程服务器

使用记事本打开 pub 公钥 复制完整的秘钥

image-20200814135723969

3.3.添加秘钥

image-20200814135749280

将公钥内容填写到上面文本框,标题可以随便写。

4. 如何使用git开发

使用纯命令行 https://www.cnblogs.com/chenwolong/p/GIT.html

使用Ecplise + EGIT**插件**

4.1. 安装 EGIT 插件

Eclipse Mars2 版本,默认集成 EGIT 插件,如果需要安装 EGIT 插件,可以使用在线安装方式实现

4.2.EGIT 插件参数配置

移除之前的所有配置

第一次操作不用操作,因为没有配置过

下图是添加过程:

image-20200814140048402

举个栗子:一定要Key:XXX.XXX;如果没有写点,就会报错。

image-20200814140128883

使用 EGIT 插件,可以提前配置一些参数,为 GIT 访问远程版本仓库提供便利

常用参数有下述 4\ 个:

  1. http.sslVerify=false 关闭 ssl 校验。(选填,如果未提供 SSH2\ 密匙必填)
  1. http.sslVersion=tlsv1.2定义ssl协议版本,Github 在最近的更新中关闭了tlsv1.0 和tlsv1.1协议的访问,不提供此参数无法访问Github远程版本仓库。(必须配置)

  2. user.email=xxx@xxx
    4.user.name=xxx[n2]

    [n2]现在不配置,后续也要弹框让你配置

* 在访问 Github 远程版本仓库的时候, Github 要求必须提供用户和电子邮箱,如果不提
供上述参数,在后续操作中需要提供对应的信息,参考下图。

img

4.2.1进入 Eclipse 配置面板(Window->Preferences)。

必须配置,即使现在不配置提交的一样要配置

image-20200814140048402

5.Git 仓库使用

5.1.复制github仓库地址

··image-20200814150456152

5.2.打开 GIT Repositories 管理面板

image-20200814150528145

image-20200814150520440

5.3.创建本地版本仓库

image-20200814150549300

5.3.1.输入账号和密码

image-20200814150816020

5.3.2.扫描远程仓库服务器

image-20200814150824500

5.3.3.远程仓库克隆到本地仓库位置[n1]

[n1]实现本地仓库和远程仓库的同步

image-20200814150836344

5.3.4.观察克隆到本地的仓库

image-20200814150849910

6.Git添加操作

6.1.Share Project

image-20200814150900770

6.2.选择仓库地址进行提交

image-20200814150910622

image-20200814150915304

6.3.观察git添加后操作

image-20200814150924083

6.4.GIT图标代号[n1]

[n1]* =》 修改过,但是没有更新到本地仓库

圆柱体 本地仓库 和 Ecplise本地项目 是一一对应的

? 表示:eclipse新的信息没有加到本地仓库

> 表示;本地代码没有添加到和本地仓库保持统一

6.5.将本地代码提交到本地仓库和远程仓库

6.5.1.选择commit

在项目上右击

image-20200814151154749

6.5.2.选择要提交的文件和提交的描述

image-20200814151203617

image-20200814151216892

注意:此处由于每个Ecplise版本不一样,所以可能会有一些差别

6.5.3.选择提交选项

1)Commit => 只提交到本地仓库,而不提交到远程仓库

2)Commit and push => 提交到本地仓库 同步提交到 远程仓库

image-20200814151234174

image-20200814151240622

image-20200814151244457

6.5.4.观察提交后的变化

6.5.4.1.观察本地项目代码

image-20200814151255201

6.5.4.2.观察远程的仓库服务器

image-20200814151305583

成功将本地仓库的项目提交到github

7.Git提交操作

7.1.新增一个方法

image-20200814151350020

7.2.将新增的进行提交(commit and push)[n1]


[n1]本地仓库和远程服务器都提交

image-20200814151357874

7.3观察

image-20200814151411987

图标的变化。

8.Git提交2

8.1.只选择commit[n1]


[n1]只提交本地仓一份,而不去提交到远程服务器上

image-20200814151529952

8.2.观察本地项目代码

image-20200814151537018

如果只更新本地 (↑箭头) => 没有提交到本地

(↓箭头) => 修改过,但是没有更新到本地仓库

8.3.如何处理

8.3.1. 选择 push

image-20200814151559875

8.3.2.选择推送分支

image-20200814151609816

image-20200814151613519

image-20200814151616970

8.3.3.仔细观察

image-20200814151624849

Eclipse 访问 Github 问题解决[n1]

image-20200814153427668

ini 配置文件增加下述配置:
ini 配置文件位置: eclipse 安装目录*/eclipse.ini* 文件。


1
-Dhttps.protocols=TLSv1.1,TLSv1.2

image-20200814153329088

[n1]需要重新启动Ecplise

进阶

1. Git更新

1.1. fetch

抓取, 抓取远程的 head 信息。从远程仓库中下载 head 头信息的变更状态。没有下载真实的代码变化

1.1.1.李四修改了代码,然后进行提交

李四先去修改代码然后再去commit and push

image-20200814153729787

1.1.2.张三将最新代码拉去到本地

1.1.2.1.Fetch from upstream 和 pull 区别

image-20200814153900946

fetch:之查看版本修改,不看内容

pull查看版本修改,也查看内容

1.1.2.2.测试Fetch from Upstream

image-20200814154010825

1条消息变更

image-20200814154024394

仅仅是下载head (下箭头 ↓ 标志)

image-20200814154037037

1.2.Pull

拉取,相当于先 fetch headpull code。 先下载 head 头的变更,再根据头信息的变更下载真实的代码。通常直接 pull 即可

1.2.1.将代码变更下载到本地

image-20200814154119932

观察:pull后的效果

image-20200814154127845

对比张三 和李四两个人的代码效果,发现一模一样

image-20200814154138385

【总结】:

Fetch:下载head

Pull :下载head和代码

2. 分支管理

为何需要分支管理?

分支管理,是 GIT 开发中的一个非常有效的团队开发策略。 多个程序员并行开发,每个程序员可以定义各自的分支,在自己的分支上开发工程。再开发结束测试完毕后,再合并到 主干工程中,一次性提交到远程。由其他程序员使用。

分支之间互不影响

2.1.创建新分支

image-20200814154314575

image-20200814154319948

image-20200814154327887

image-20200814154331494

image-20200814154336372

image-20200814154344056

image-20200814154349979

image-20200814154354082

张三删除brank-1中的 void aa(); 方法,然image-20200814154415138进行提交

李四从master主干分支下拉去最新代码

image-20200814154422999

image-20200814154427649

image-20200814154431899

2.2.分支切换

image-20200814154439954

2.3.合并分支

首先需要切换到master主分支

image-20200814154542676

image-20200814154547358

image-20200814154553292

image-20200814154557538

image-20200814154604051

李四也可以去拉去一下最新的代码 pull操作

image-20200814154612285

2.4.删除分支

2.4.1.删除本地分支

image-20200814154624184

尽量不要删除master

image-20200814154631667

image-20200814154636087

删除远程分支试一试?

image-20200814154646853

确定没有了吗?

image-20200814154657452

image-20200814154702631

image-20200814154707309

思考:为何又回来了呢?

因为你删除的是head,而不是真正的远程分支

2.4.2.删除远程分支

image-20200814154731466

image-20200814154735453

image-20200814154740102

3.冲突管理

github中有更新,必须先pull了才能push,谁先提交谁比较爽,谁后提交谁倒霉。

张三修改了一个文件

image-20200814154754601

李四修改了同一个文件

image-20200814154802713

张三先提交了,

然后李四再去提交

image-20200814154828618

image-20200814154831699

image-20200814154836391

image-20200814154841245

image-20200814154845845

image-20200814154852938

image-20200814154858337

image-20200814154902419

将新的内容加到head索引里面,让head中有新增的东西

image-20200814154914135

image-20200814154920870

另外一方 张三再去服务器重新拉取最新的 pull

image-20200814154930649

4.拉取内容

4.1.拉取远程的工程

image-20200814154945534

image-20200814154950074

image-20200814154955017

image-20200814154959379

4.2.拉取远程的代码

image-20200814155243120

Git 中, fetchpull 的功能不同, fetch 是拉取远程版本库中的变化信息,是将远程
版本仓库中最新版本的 heads 头信息更新到本地版本仓库,不包含具体的内容。 pull 则是将
远程版本仓库中的 heads 和内容都更新到本地仓库。可用下述图例简单描述:

image-20200814155305236

5.删除内容

5.1.删除代码 (删除文件)

image-20200814160714856

image-20200814160719991

另外一方李四 pull 拉取最新

拉取之前

image-20200814160731577

拉取之后

image-20200814160742765

5.2.删除工程

image-20200814160751311

image-20200814160754938

观察github

image-20200814160801192

思考:为什么远程仓库没有被删除呢?

image-20200814160810034

image-20200814160830718

观察远程仓库 还有没有文件呢?

因为删除了本地仓库但是没有提交

image-20200814160837267

Git软件

三种使用方式

1.图形窗口使用git GUI

2.命令行git bash

image-20200814163542134

3.使用第三方工具

image-20200814164235188

还可以直接在idea中使用Git

idea

idea中使用Git

检查idea是否与本地的git软件关联

image-20200814193353956

以为之前使用eclipse已经将公钥放到github中,所以是使用idea操作github的时候就不重复之前操作

注意:不论是用什么什么工具操作github仓库都需要啊本地生成ssh公私密钥,并且将公钥放到github中

1、本地创建项目上传到github

1.在github创建一个仓库

image-20200814190647765

image-20200814185205348

创建完成仓库

image-20200814190844636

2、在本地创建一个项目

image-20200814192840370

3、将项目进行Git初始化

image-20200814192938171

选择需要上传的项目为根目录

image-20200814193023389

4、将项目push

image-20200814193609547

image-20200814193704920

image-20200814193846846

image-20200814194818366

image-20200814194844571

到github中查看,上传成功。

2、github克隆项目下来

image-20200814200304863

image-20200814200411280

新建本地创建一个空文件必须没有项目,因为克隆下来的项目必须放在一个项目为空的目录中;并且新建的文件夹需要git初始化,不然没法克隆,

image-20200814184604373