CI/CD之初识Git

Posted Tuki_a

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CI/CD之初识Git相关的知识,希望对你有一定的参考价值。

Git简介

Git 是一个免费的开源分布式版本控制系统,旨在快速高效地处理从小到大的所有项目。

Git 是一个快速、可扩展、分布式版本控制系统,具有异常丰富的命令集,提供高级操作和对内部的完全访问。

Git易于学习, 占用空间小,性能快如闪电。它优于 Subversion、CVS、Perforce 和 ClearCase 等 SCM 工具,具有便宜的本地分支、方便的暂存区和 多个工作流等功能。

Git必看秘籍:https://git-scm.com/book/zh/v2

Git特点

速度、简单的设计、对非线性开发模式的强力支持(允许成千上万个并行开发的分支)、完全分布式、有能力高效管理类似 Linux 内核一样的超大规模项目(速度和数据量)。

自诞生于 2005 年以来,Git 日臻成熟完善,在高度易用的同时,仍然保留着初期设定的目标。 它的速度飞快,极其适合管理大项目,有着令人难以置信的非线性分支管理系统。

VCS (版本控制系统)介绍

本地版本控制系统:
大多都是采用某种简单的数据库来记录文件的历次更新差异。其中最流行的一种叫做 RCS,现今许多计算机系统上都还看得到它的踪影。 RCS 的工作原理是在硬盘上保存补丁集(补丁是指文件修订前后的变化);通过应用所有的补丁,可以重新计算出各个版本的文件内容。

集中化的版本控制系统(Centralized Version Control Systems,简称 CVCS):
这类系统,诸如 CVS、Subversion 以及 Perforce 等,都有一个单一的集中管理的服务器,保存所有文件的修订版本,而协同工作的人们都通过客户端连到这台服务器,取出最新的文件或者提交更新。 多年以来,这已成为版本控制系统的标准做法。
可以让不同系统上的开发者协同工作。

上述两个系统都有一样的缺点:
显而易见的缺点是中央服务器的单点故障。 如果宕机一小时,那么在这一小时内,谁都无法提交更新,也就无法协同工作。 如果中心数据库所在的磁盘发生损坏,又没有做恰当备份,毫无疑问你将丢失所有数据——包括项目的整个变更历史,只剩下人们在各自机器上保留的单独快照。 本地版本控制系统也存在类似问题,只要整个项目的历史记录被保存在单一位置,就有丢失所有历史更新记录的风险。

分布式版本控制系统:
在这类系统中,像 Git、Mercurial、Bazaar 以及 Darcs 等,客户端并不只提取最新版本的文件快照, 而是把代码仓库完整地镜像下来,包括完整的历史记录。 这么一来,任何一处协同工作用的服务器发生故障,事后都可以用任何一个镜像出来的本地仓库恢复。 因为每一次的克隆操作,实际上都是一次对代码仓库的完整备份

Git项目的三个阶段

Git 有三种状态:已提交(committed)、已修改(modified) 和 已暂存(staged)
已修改表示修改了文件,但还没保存到数据库中。
已暂存表示对一个已修改文件的当前版本做了标记,使之包含在下次提交的快照中。
已提交表示数据已经安全地保存在本地数据库中。

这会让我们的 Git 项目拥有三个阶段:工作区、暂存区以及 Git 目录

Git命令集语法

语法如下:

git [--version] [--help] [-C <路径>] [-c <名称>=<值>]
    [--exec-path[=<path>]] [--html-path] [--man-path] [--info-path]
    [-p|--paginate|-P|--no-pager] [--no-replace-objects] [--bare]
    [--git-dir=<路径>] [--work-tree=<路径>] [--namespace=<名称>]
    [--super-prefix=<路径>] [--config-env=<名称>=<环境变量>]
    <命令> [<参数>]

更多详细参数用法参考官方文档:https://git-scm.com/docs/git#_git_commands

Git的使用

新手git教程:https://git-scm.com/docs/gittutorial

获取 Git 仓库通常有两种方式:

1、将尚未进行版本控制的本地目录转换为 Git 仓库。
2、从其它服务器克隆 一个已存在的 Git 仓库。比如: git clone

将项目导入Git

创建一个新目录当作是项目目录

mkdir test
cd test

安装Git工具包

进入工作目录进行初始化版本库,查看隐藏文件会发现创建了一个名为“.git”的新目录(.git目录是git跟踪管理版本库的)。

创建一个文件(注意跟踪的都得是文件形式的,不能是二进制程序),查看状态现在是未知状态(-s是简化输出)

告诉 Git 对当前目录下read.md文件的内容进行快照,使用git add。此快照现在存储在 Git 称为“索引”的临时暂存区中。查看状态已变为A(意为本地新增的文件)

使用git commit将索引的内容永久存储在存储库中,使用给定的“add read.md”作为提交消息。我的报错是因为git不知道进行这个操作的人是谁,git需要记录,所以根据提示告诉git自己是谁

执行如下命令告诉git自己是谁,重新提交成功

对文件进行修改,拍快照再提交。可以看到状态的变化,在右边红色的M是跟踪的文件有内容变化,在左边绿色的M是修改已到暂存区待提交。

查看已暂存和未暂存的修改
# git diff

没拍快照前(即没进入工作区之前)撤销更改

以vim的方式添加内容

查看状态

拍快照后作新的修改,状态出现了两个M(即一部分修改在工作区,一部分在暂存区)

提交只提交了在暂存区的一部分,由此可以看出每次修改都是独立的,都需要拍快照提交

提交后撤销更改

设置忽略文件

创建一个隐藏文件和一个隐藏目录,查看状态只有文件的,因为目录里没东西

进入目录创建一个文件,查看状态文件和目录都有

一般情况下,隐藏文件大多是一些临时文件,我们并不需要将其上传保存,所以编辑忽略文件,内容如下

[root@lucky test]# vim .gitignore
.*

这回再查看状态就没有了

版本升级

再作更改提交为版本2

查看日志可以看到操作记录

删除文件+版本回退

删除文件,状态变为D

执行git rm提交到暂存区,状态变为绿色

reset再+checkout可以取消删除操作

重新删除提交后是真的删除了

但是因为我们当时作修改时作为新版本提交了,所以可以回到版本二,那么文件就回来了

以上是关于CI/CD之初识Git的主要内容,如果未能解决你的问题,请参考以下文章

CI/CD之搭建私有git仓库gitlab

CI/CD之搭建私有git仓库gitlab

CI/CD之推送本地仓库到远程Git仓库克隆远程Git仓库(使用Gitee)

CI/CD之推送本地仓库到远程Git仓库克隆远程Git仓库(使用Gitee)

如何使用GitLab和Rancher构建CI/CD流水线–Part 1

SpringBoot+Git+Jenkins+Docker实现CI/CD