文章目录


img

该文章已同步收录到我的博客网站,欢迎浏览我的博客网站,xhang’s blog

1:Git概述

Git是一个免费的、开源的**分布式版本控制系统**,它可以在任何时间点, 将文档的状态作为更新记录保存起来,也可以在任何时间点, 将更新记录恢复回来。

知识点:

​ 版本控制:版本控制是一种记录文件内容变化,以便来查阅特定版本修订情况的系统。

​ 版本控制其实最重要的是可以记录文件修改历史记录,从而能够让用户查看历史版本,方便版本切换。

​ 为什么要使用版本控制:

个人开发过渡到团队协作

image-20220918173113750

2:集中式版本控制和分布式版本控制

2.1集中式版本控制

集中化的版本控制系统都有一个单一的集中管理的服务器,保存所有文件的修订版本,而协同工作的人们都通过客户端连到这台服务器,取出最新的文件或者提交更新。

这种做法带来了许多好处,每个人都可以在一定程度上看到项目中的其他人正在做些什么。而管理员也可以轻松掌控每个开发者的权限,并且管理一个集中化的版本控制系统,要远比在各个客户端上维护本地数据库来得轻松容易。

事分两面,有好有坏。这么做显而易见的缺点是中央服务器的单点故障。如果服务器宕机一小时,那么在这一小时内,谁都无法提交更新,也就无法协同工作

image-20220918173345066

2.2分布式版本控制

像 Git 这种分布式版本控制工具,客户端提取的不是最新版本的文件快照,而是把代码仓库完整地镜像下来(本地库)。这样任何一处协同工作用的文件发生故障,事后都可以用其他客户端的本地仓库进行恢复。因为每个客户端的每一次文件提取操作,实际上都是一次对整个文件仓库的完整备份。分布式的版本控制系统出现之后,解决了集中式版本控制系统的缺陷:

  1. 服务器断网的情况下也可以进行开发(因为版本控制是在本地进行的)

  2. 每个客户端保存的也都是整个完整的项目(包含历史记录,更加安全)

image-20220918173414605

3:Git简史

image-20220918173708599

4:Git工作机制

image-20220918173823117

5:Git和代码托管中心

代码托管中心是基于网络服务器的远程代码仓库,一般我们简单称为远程库。

局域网:

  • GitLab

互联网:

  • GitHub
  • Gitee码云

6:Git的安装

去官网下载:

image-20220918175311350

安装成功:

image-20220918181622010

在电脑桌面右键打开Git命令行客户端,输入git --version查看git版本信息。

image-20220918181759201

7:Git的常用命令

命令名称作用
git config --global user.name 用户名设置用户签名
git config --global user.email 邮箱设置用户签名
git init初始化本地库
git status查看本地库状态
git add 文件名添加到暂存区
git commit -m “日志信息” 文件名提交到本地库
git reflog查看历史记录
git reset --hard 版本号版本穿梭

7.1设置用户签名和设置SSH免密登录

7.1.1设置用户签名

签名的作用是区分不同操作者身份。用户的签名信息在每一个版本的提交信息中能够看到,以此确认本次提交是谁做的。Git 首次安装必须设置一下用户签名,否则无法提交代码

基本语法:

git config --global user.name 用户名
git config --global user.email 邮箱

image-20220918183305226

在本地Window用户目录下找到git的配置文件

image-20220918183000468

image-20220918182935295

7.1.2设置SSH免密登录

  1. 进入git bash,输入以下命令
ssh-keygen -t rsa -C "邮箱"
  1. 在用户目录下生成公钥和私钥或者使用命令直接查看公钥

image-20221228131238305

  1. 在gitee上添加公钥

image-20221228131433224

  1. 测试SSH连接

​ 输入命令:

ssh -T git@gitee.com

image-20221228131539969

7.2初始化本地库

一:创建一个空的文件件

二:在空文件当中打开Git命令行窗口

GIF 2022-9-18 18-42-56

三:执行初始化命令,自动生成.git文件,但是此文件是一个隐藏文件。

基本语法:

git init

image-20220918184408642

执行命令查看隐藏文件:

image-20220918184637524

7.3查看本地库状态

基本语法:

git status

image-20220918184812922

可以看到本地库中没有提交任何文件

创建文件并测试

image-20220918185059623

在vim编辑器的命令行模式下添加文件内容

image-20220918185313783

查看到刚刚创建的文件

image-20220918185423662

image-20220918185514966

再次查看本地库状态

image-20220918185634828

test.txt文件标记为红色,表示该文件未被追踪。

7.4添加暂存区

将上一个未被追踪的文件添加到暂存区

基本语法:

git add 文件名

image-20220918205708768

文件由红色变为绿色,表示该文件已经被追踪。

及该文件已经在暂存区

image-20220918205731914

在Git工作机制当中已经说了暂存区中文件可以进行删除,但是工作区当中的文件依旧存在。

例子:删除工作区的文件,查看

image-20220918210721924

7.5提交本地库

将暂存区的文件提交到本地库

​ 基本语法:

git commit -m "日志文件" 文件名

image-20220918211417958

查看刚刚被提交的版本信息

git reflog

image-20220918211757051

查看详细的提交版本信息

git log

image-20220918212122246

7.6修改文件

进入vim编辑器,修改文件内容。

image-20220918212430725

查看本地库状态

image-20220918212718592

将修改后的文件添加到暂存区,并且提交到本地库

image-20220918213056554

查看提交版本信息

image-20220918213217282

7.7查看历史记录

基本语法:

#查看版本信息
git reflog 
#查看版本的详细信息
git log 

image-20220919103837086

7.8版本穿梭

版本穿梭就是相当于快照,可以在本地仓库进行版本的前进与后退。

基本语法:

git reset --hard 版本号

image-20220919105425555

查看文件内容,文件内容为第一个版本内容:

image-20220919105456672

Git 切换版本,底层其实是移动的 HEAD 指针,具体原理如下图所示

image-20220919110247385

8:Git分支

8.1公司中服务器的运行模式

image-20220919110505705

8.1什么是分支

在版本控制过程中,同时推进多个任务,为每个任务,我们就可以创建每个任务的单独分支使用分支意味着程序员可以把自己的工作从开发主线上分离开来,开发自己分支的时候,不会影响主线分支的运行。对于初学者而言,分支可以简单理解为副本,一个分支就是一个单独的副本。(分支底层其实也是指针的引用)

image-20220919110723245

8.2分支的好处

同时并行推进多个功能开发,提高开发效率。

各个分支在开发过程中,如果某一个分支开发失败,不会对其他分支有任何影响。失败的分支删除重新开始即可。

8.3分支的操作

命令名称作用
git branch 分支名创建分支
git branch -v查看分支
git checkout 分支名切换分支
git merge 分支名把指定的分支合并到当前分支上

8.3.1查看分支

语法:

git branch -v

image-20220919122522058

8.3.2创建分支

语法:

git branch 分支名

可以看到已经创建的hot-fix分支

image-20220919122722814

8.3.3切换分支

可以看到当前是在master分支上

image-20220919122931036

将分支切换到刚刚创建的hot-fix分支上

语法:

git checkout 分支名

image-20220919123300744

切换分支后修改文件,重新添加到暂存区并提交到本地库:

image-20220919124005313

再切换到master分支查看文件内容:

image-20220919124040645

8.3.4合并分支

把指定的分支合并到当前分支上

语法:

git merge 分支名

在master分支下合并hot-fix分支

image-20220919124528404

8.3.5合并分支产生的冲突

冲突产生的原因:

​ 合并分支时,两个分支在==同一个文件的同一个位置==有两套完全不同的修改。Git 无法替我们决定使用哪一个。必须人为决定新代码内容。

一:master分支下test.txt文件的内容:

image-20220919131900421

二:hot-fix分支下test.txt文件的内容:

image-20220919133426110

三:切换到master分支下,合并hot-fix分支:

可以发现自动合并失败

image-20220919132127844

四:查看本地库状态:

image-20220919132219830

五:查看文件内容:

image-20220919133609392

六:手动合并

image-20220919133634326

七:添加到暂存区,提交本地库

注意:此时使用 git commit 命令时不能带文件名

image-20220919133027472

八:查看两个分支下的文件内容

image-20220919133849279

8.4切换分支的本质

切换分支的本质就是移动 HEAD 指针

master、hot-fix 其实都是指向具体版本记录的指针。当前所在的分支,其实是由 HEAD决定的。所以创建分支的本质就是多创建一个指针。

HEAD 如果指向 master,那么我们现在就在 master 分支上。HEAD 如果指向 hotfix,那么我们现在就在 hotfix 分支上。

image-20220919134217824

9:Git团队协作机制

9.1团队内协作

image-20220919160159925

9.2跨团队协作

image-20220919160209990

10:GitHub操作

GitHub

登录官网

image-20220919161704634

10.1创建远程仓库

image-20220919161739355

远程库的名字一般和本地仓库的名字保持一致

image-20220919161947174

image-20220919165438738

image-20220919165530849

10.2远程仓库的基本操作

命令名称作用
git remote -v查看当前所有远程地址别名
git remote add 远程仓库别名 远程地址起远程仓库别名
git push 远程仓库别名 分支推送本地分支上的内容到远程仓库
git clone 远程仓库地址将远程仓库的内容克隆到本地
git pull 远程仓库别名 分支将远程仓库对应分支最新内容拉下来后与当前本地分支直接合并
git remote rm 远程仓库地址别名移除远程地址别名

10.2.1创建远程仓库别名

基本语法:

git remote -v 查看当前所有远程地址别名
git remote add 别名 远程地址

刚刚创建的远程库地址为:

https://github.com/sunwebgo/Git_repository.git

一:查看远程库

​ 可以发现现在没有远程库别名

image-20220919164918530

二:创建远程库别名

image-20220919165801208

10.2.2推送本地库到远程仓库

语法:

git push 别名 分支

将master分支推送到远程库

提示通过浏览器登录GitHub

image-20220919170326616

image-20220919170916225

推送完成:

image-20220919172049280

image-20220919172141751

查看文件内容:

image-20220919172203648

10.2.3拉取远程库到本地库

更新本地库内容

image-20220919172554153

image-20220919172640089

拉取远程库到本地库

​ 语法:

git pull 别名 分支

image-20220919173233241

查看本地库状态:

拉取后自动提交到本地库

image-20220919173320943

查看文件内容:

image-20220919173353927

10.2.4克隆远程库到本地

语法:

git clone 远程地址

创建新的文件夹

image-20220919173855566

在远程仓库获取到远程仓库地址

image-20220919174209432

在此文件内打开Git,执行命令

image-20220919174345306

在此文件夹下生成了对应的远程库文件

image-20220919174643444

image-20220919174628781

clone 会做如下操作。

1、拉取代码。

2、初始化本地仓库。

3、创建别名

image-20220919174823654

10.3GitHub团队内协作

团队成员可以在本地库修改,再推送到远程库即可

下面的情况是clone(克隆)实现的,所以不需要加入团队就能推送font>

一:首先查看远程库别名、本地库状态、本地库中的文件

image-20220919175313834

二:修改本地库文件,添加到暂存区、提交到本地库

image-20220919175524246

三:推送到远程库

​ 推送成功

image-20220919175833424

image-20220919175917334

四:切换到本地库,拉取刚刚clone推送的远程库

image-20220919180953633

拉取成功,查看文件内容是否更新:

image-20220919181046005

10.4GitHub跨团队协作

image-20220919160209990

将远程仓库的地址复制发给邀请跨团队协作的人

image-20220920083151870

团队外的人就可以通过远程库链接打开远程仓库。其可以通过在线的方式修改文件内容,也可以通过克隆的方式将项目拉取到本地库进行修改

image-20220920083430703

修改完后,团队外的人需要创建一个拉取请求:

image-20220920084332381

image-20220920084455013

然后在团队内成员回收到拉取请求:

image-20220920084545102

image-20220920084633369

团队人员进行审核后,合并到远程库

image-20220920084715640

image-20220920084726504

11:idea集成Git

11.1配置Git忽略文件

需要忽略的文件有idea指定文件,target目录下的文件。

image-20220920090043598

一:为什么要忽略他们呢?

与项目的实际功能无关,不参与服务器上部署运行。把它们忽略掉能够屏蔽 IDE 工具之间的差异。

二:如何忽略?

​ 创建忽略规则文件 xxxx.ignore(前缀名随便起,建议是 git.ignore)

​ 这个文件的存放位置原则上在哪里都可以,为了便于让~/.gitconfig 文件引用,建议也放在用户家目录下

忽略文件规则如下:

# Compiled class file
*.class
# Log file
*.log
# BlueJ files
*.ctxt
# Mobile Tools for Java (J2ME)
.mtj.tmp/
# Package Files #
*.jar
*.war
*.nar
*.ear
*.zip
*.tar.gz
*.rar
# virtual machine crash logs, see 
http://www.java.com/en/download/help/error_hotspot.xml
hs_err_pid*
.classpath
.project
.settings
target
.idea
*.iml
*.xml

在用户家目录下创建忽略文件

image-20220920090713313

image-20220920090839662

添加忽略规则

image-20220920090900299

在家目录下找到.gitconfig文件中引用忽略配置文件

image-20220920091104173

注意:这是需要使用正斜线“/”

image-20220920091248953

11.2定位git程序

在idea中进行配置

image-20220920091951565

11.3初始化本地库

一:创建新工程

二:在项目中创建本地库

image-20220920092326686

image-20220920092619465

image-20220920093158250

11.4添加文件到暂存区

发现pom文件变红了,表示此文件没有添加到暂存区

image-20220920093300345

添加文件到暂存区

image-20220920093413034

添加后颜色变绿

image-20220920093445834

在src在创建新的项目目录,创建类

提示是否将创建的文件添加到本地库

image-20220920093929181

image-20220920094050914

将整个项目添加到暂存区

image-20220920094130442

image-20220920094440759

提交到本地库,发现只有绿色文件提交

image-20220920094526245

image-20220920135845159

提交到本地库后文件变为正常颜色:

image-20220920094718856

11.5切换版本

修改代码后文件变蓝,表示该文件被追踪过,但是修改了

image-20220920133330849

将项目添加到暂存区,并提交到本地库(也可以直接提交到本地库

image-20220920135936505

在 IDEA 的左下角,选择Git,然后点击 Log 查看版本

image-20220920095708096

查看刚刚创建的版本,指针指向最新版本

image-20220920140012179

切换版本

image-20220920133605967

头指针指向指定的版本,并且代码内容已经更改。

image-20220920133625358

11.6创建分支

image-20220920125115206

image-20220920125510672

11.7切换分支

首先查看当前分支

image-20220920140416260

切换分支

image-20220920130124341

可以看到master分支有Checkout选项,而当前指针指向的分支没有Checkout选项

image-20220920130147423

image-20220920130330239

11.8合并分支1.0(正常合并)

更改hot-fix分支下的内容

image-20220920134550779

将hot-fix分支提交到本地库

image-20220920134712943

master分支

image-20220920140652200

在master分支下合并hot-fix分支

image-20220920134931491

合并后master分支下的内容变为三行

image-20220920140827433

image-20220920140917723

11.9合并分支2.0(冲突合并)

切换到hot-fix分支添加内容

image-20220920141045054

再次提交到本地库

image-20220920141141596

image-20220920141157956

切换到master分支下更改内容

image-20220920141624670

再提交到本地库

image-20220920141725066

image-20220920141842839

在master分支下合并hot-fix分支

image-20220920141950283

提示冲突,手动合并

image-20220920142057685

image-20220920142159563

进行合并

image-20220920142225229 master分支下合并成功

image-20220920142251901

image-20220920142423156

12:idea集成GitHub

12.1安装GitHub插件

image-20220920142734328

12.2登录GitHub账号

image-20220920142936828

跳转到页面

image-20220920143022015

image-20220920143059784

授权成功

image-20220920143153898

在idea中登录GitHub成功

image-20220920143238978

上述方式登录失败的解决方案:采用Token方式进行登录

image-20221026162721397

image-20221026162803059

采用生成的令牌进行登录

image-20221026163001061

12.3分享项目到GitHub

image-20220920143740962

image-20220920144026550

image-20220920145531064

image-20220920145549289

image-20220920145756154

Test.java文件内容

image-20220920145830606

12.4推送本地库到远程库

修改代码,提交到本地库,再推送到远程库

image-20220920155030734

image-20220920155005375

image-20220920155233398

image-20220920155610792

推送成功

image-20220920155740398

image-20220920155804373

12.5拉取远程库合并本地库

push 是将本地库代码推送到远程库,如果本地库代码跟远程库代码版本不一致,push 的操作是会被拒绝的。也就是说,要想 push 成功,==一定要保证本地库的版本要比远程库的版本高!==因此一个成熟的程序员在动手改本地代码之前,一定会先检查下远程库跟本地代码的区别!如果本地的代码版本已经落后,切记要先 pull 拉取一下远程库的代码,将本地代码更新到最新以后,然后再修改,提交,推送!

修改远程库内容

image-20220920202202973

在idea中拉取远程库

image-20220920202338126

image-20220920202504003

image-20220920202139096

12.6克隆远程库到本地库

操作:删除test_git项目,从远程仓库再克隆一份。

删除文件后重新打开idea,选择Get from VCS:

image-20220920203129988

image-20220920203414125

image-20220920203235762

image-20220920203617605

查看clone后的项目,和原项目一样。

image-20220920203717922

13:Gitee

13.1Gitee简介

众所周知,GitHub 服务器在国外,使用 GitHub 作为项目托管网站,如果网速不好的话,严重影响使用体验,甚至会出现登录不上的情况。针对这个情况,大家也可以使用国内的项目托管网站-码云。

码云是开源中国推出的基于 Git 的代码托管服务中心,网址是 https://gitee.com/ ,使用方式跟 GitHub 一样,而且它还是一个中文网站,如果你英文不是很好它是最好的选择。

13.2Gitee创建远程仓库

image-20220920204850217

image-20220920205106286

在这里插入图片描述

image-20220920205224053

14:idea集成Gitee

14.1安装Gitee插件

image-20220920205502149

14.2登录Gitee账号

打开setting,选择Version Control选项,可以查看到Gitee

image-20220920205645152

添加账户

image-20220920210045245

在这里插入图片描述

14.3推送本地库到远程库

在Git中选择Push推送

image-20220920210412546

获取到远程库链接,定义远程库并推送

image-20220920210600008

image-20220920211241557

image-20220920211110112

推送成功,查看远程库

在这里插入图片描述

修改本地库内容,提交到本地库,再次推送到远程库

image-20220920211530778

image-20220920211617072

image-20220920211639187

推送完成,再次查看远程库

在这里插入图片描述

14.4拉取远程库到本地库

首先修改远程仓库内容

在这里插入图片描述

拉取远程库

image-20220920223035831

image-20220920223106533

拉取成功

image-20220920223138219

14.5Gitee导入GitHub项目

码云提供了直接复制 GitHub 项目的功能,方便我们做项目的迁移和下载。

点击新建仓库,进行导入

在这里插入图片描述

在这里插入图片描述

测试导入GitHub项目

image-20220920223708543

image-20220920224127039

远程仓库导入成功

在这里插入图片描述

在这里插入图片描述

GitHub上远程仓库更新,Gitee上远程仓库可以强制更新

image-20220920224539770

点击强制更新按钮

在这里插入图片描述

在这里插入图片描述

14.6git的回滚

image-20230326193657766

15:自建代码托管平台GitLab

15.2GitLab简介

GitLab 是由 GitLabInc.开发,使用 MIT 许可证的基于网络的 Git 仓库管理工具,且具有wiki 和 issue 跟踪功能。使用 Git 作为代码管理工具,并在此基础上搭建起来的 web 服务

官网地址:https://about.gitlab.com/

安装说明:https://about.gitlab.com/installation/

image-20220920225948625

15.3GitLab安装

image-20220920225635040

15.3.1服务器准备

准备一个系统为 CentOS7 以上版本的服务器,要求内存 4G,磁盘 50G。关闭防火墙,并且配置好主机名和 IP,保证服务器可以上网。

image-20220921094035597

切换为root用户,进入以下文件

image-20220921095544949

修改主机名

image-20220921095310245

重启虚拟机:运行级别6 init 6

image-20220921095920727

image-20220921100134022

使用xshell连接虚拟机

image-20220921100204645

连接成功

image-20220921100239324

测试网络连接:

image-20220921100603181

查看防火墙状态并关闭

image-20220921100746435

15.3.2安装GitLab

GitLab安装包地址

gitlab/gitlab-ce - Packages · packages.gitlab.com

将此包上传到服务器/opt/module 目录下即可

image-20220921103015573

  1. 创建脚本
vim gitlab-install.sh
sudo rpm -ivh /opt/module/gitlab-ce-15.3.3-ce.0.el8.x86_64.rpm
sudo yum install -y curl policycoreutils-python openssh-server cronie
sudo lokkit -s http -s ssh
sudo yum install -y postfix
sudo service postfix start
sudo chkconfig postfix on
curl https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.rpm.sh | sudo bash
sudo EXTERNAL_URL="http://gitlab.example.com" yum -y install gitlab-ce

image-20220921103416355

  1. 给脚本添加执行权限
 chmod +x gitlab-install.sh

image-20220921103557464

  1. 执行脚本,安装gitlab
./gitlab-install.sh

image-20221011142413940

  1. 初始化GitLab服务
gitlab-ctl reconfigure
  1. 启动GitLab服务
gitlab-ctl start

image-20221011143501217

15.3.3使用浏览器访问GitLub

在浏览器输入ip地址,因为GitLub的默认端口是80

没有账号的首先注册一下:

image-20221011143746431

15.4idea集成GitLab

  1. 首先在idea中安装插件

image-20221011144918208

  1. 添加GitLab服务

image-20221012123031824

  1. 将项目添加到暂存区,再提交到本地库

  2. 创建远程库链接

image-20221012124536404

  1. 输入用户名和密码,推送

image-20221012124934007

  1. 查看远程库的master分支

    image-20221012130142717

image-20221012125338703

  1. 将master分支合并到main分支上

image-20221012130214473

image-20221012131141583

  1. master分支已经删除,main分支合并完成

    image-20221012133413618

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐