深入浅出DevOps:版本控制Git&Gitlab

? 作者: 俗世游子【谢先生】。 8年开发3年架构。专注于Java、云原生、大数据等领域技术。
? 成就: 从CRUD入行,负责过亿级流量架构的设计和落地,解决了千万级数据治理问题。
? 同名社区: 51CTO掘金gitee

前言

上一章我们已经介绍了DevOps的流程和在DevOps管理下的生命周期,接下来介绍一下在整个生命周期中所涉及到的工具

首先是版本控制工具

版本控制

现在什么文档云之类的产品,都存在版本控制的功能。版本控制是一种记录,我们可以将其理解为一个“数据库”,记录着我们对某一文件或某数据的操作记录,当我们需要查看或者对比之前的某一个版本的时候可以很方便的展示出所有改动的细节。

为什么需要版本控制

版本控制

版本控制绝对是最主要的一个目的。

原始做法是我们在本地手动进行备份操作,但是随着时间的推移,却不记得哪个备份是最新的,每个备份分别进行了什么修改,什么时候修改的等等一切问题。

而版本管理软件能解决这些问题,它有详细的日志,能记住你的每一次提交、每一次改动,并且能够比较查看不同版本之间的异同,并且可以恢复到之前的任一版本。

数据备份

这是一个主要的原因了。虽然数据备份同样可以用比较笨的方法:本地复制副本,但这种古老的方法有很多不足,无法应对频繁的修改,并且还会造成成版本混乱,不便于管理,并且占用空间极大。

多人协作

及时提交更新代码,能让团队中的成员了解到代码的最新情况,避免重复劳动。

Git

Git作为主流版本控制工具,其江湖地位是毋庸置疑的。

这么说吧:本人在16年工作能够在众多成员之中脱颖而出当选组长,很大一部分还要归功于对Git的了解

Git的特点

直接记录快照

Git 把数据看作是对小型文件系统的一系列快照。 在 Git 中,每当你提交更新或保存项目状态时,它基本上就会对当时的全部文件创建一个快照并保存这个快照的索引。 为了效率,如果文件没有修改,Git 不再重新存储该文件,而是只保留一个链接指向之前存储的文件。

近乎本地执行的操作

在 Git 中的绝大多数操作都只需要访问本地文件和资源,一般不需要来自网络上其它计算机的信息。 如果你习惯于所有操作都有网络延时开销的集中式版本控制系统,Git 在这方面会让你感到速度之神赐给了 Git 超凡的能量。

因为你在本地磁盘上就有项目的完整历史,所以大部分操作看起来瞬间完成。

保证完整性

Git 中所有的数据在存储前都计算校验和,然后以校验和来引用。 这意味着不可能在 Git 不知情时更改任何文件内容或目录内容。 这个功能建构在 Git 底层,是构成 Git 哲学不可或缺的部分。 若你在传送过程中丢失信息或损坏文件,Git 就能发现。

安装Git

Windows下安装Git非常简单,点击​​下载​​,傻瓜式安装

CentOS下安装如下操作

yum install -y git

非常简单就完成了Git的安装,最后可以通过​​git --version​​验证安装是否成功

基本操作

配置环境

在安装完成Git之后,我们要做的第一件事就是设置你的用户名和邮件地址。每一个提交记录都会使用这些信息,并且提交记录中的用户信息不能被修改:

git config --global user.name "你自己的名字"
git config --global user.email "你自己的邮箱"

这里需要注意,​​--global​​​表示全局配置,使用了该配置,那么当前命令只需要运行一次。如果想要在针对特定目录使用不同的用户和邮箱,那么只需要在特定目录下指定不带​​--global​​的命令即可

如果我们想要查看配置的话,可以通过​​git config --list​​来列出当前Git下的全部配置信息

获取Git仓库

获取Git仓库的方式有两种:

  • 将尚未进行版本控制的本地目录转换为 Git 仓库
  • 从远程仓库克隆一个已经存在的Git仓库到本地

两种方式各不相同,接下来我们一一了解到

在已存在的目录中初始化

进入到指定的目录中,然后执行如下命令

git init

当前命令会在目录下创建一个​​.git​​的隐藏目录,该目录下包含了Git初始化仓库所需要的全部文件,且这些文件是整个Git的核心

如果对其中的文件内容感兴趣的话,可以通过查看​​Git内部原理​​进行查看

这里只是初始化好了仓库,但是并未进行版本控制,接下来我们将文件进行控制

# Git开始跟踪文件:.表示当前仓库下的全部文件
git add .
# 指定跟踪的文件
git add README.md
# 提交更新
git commit -m "first commit"
# 查看
git status

如果想要将本地文件推送到远程仓库中,那么需要进行如下操作

# 添加远程仓库地址,这里已gitee为例,其他的都是一样的操作
git remote add origin https://gitee.com/mr_sanq/test.git
# 推送
git push origin master
从远程仓库克隆

远程仓库是指托管在因特网或其他网络中,根据职责不同,对不同的仓库提供不同的操作权限。

这里以gitee远程仓库为例

# 将远程仓库拉取到本地
git clone https://gitee.com/xxx/test.git 【新名称】
# 指定分支拉取
git clone -b 【分支】 https://gitee.com/xxx/test.git
# 查看远程地址
git remote -v
# 当其他成员更新仓库之后,我们想要更新下来,但是需要手动合并
git fetch
# 更新下来之后自动合并,容易出现代码冲突
git pull

推送之前的操作都是一样的,这里就不过多介绍

查看Git历史

通过​​git log​​ 命令我们可以当前仓库下的提交记录,默认情况下,记录会按照时间先后顺序列出所有的提交,最近的更新排在最上面。

分支管理

这么说吧:我们开发的系统作为基础版本,在更新迭代的过程中出现某种特殊需求但是不想影响到基础版本的时候,我们就可以已基础版本为基础,独立出一个新的分支出来,这样两边可以互不影响。未来也可以将某些改动合并到其他分支上

开枝散叶懂不懂

# 创建新分支
git branch shanghai
# 切换分支
git checkout master
# 合并分支,将代码合并到master分支
git merge shanghai

到这里就不介绍Git了,下面我们来介绍一下远程仓库

这里不是Git入门介绍,简单介绍一下也是为了方便后续DevOps的学习
更多关于Git的知识,请移步​​​Git官网​​进行学习

远程仓库

到目前为止,我们已经有办法使用 Git 来完成日常工作。 然而,为了使用 Git 协作功能,我们还需要有远程的 Git 仓库,也就是代码托管平台。

这里为大家提供几个以供大家选择:

  • ​Github​​作为目前最大的 Git 托管平台远近闻名,不过只能免费创建公共仓库,并且由于国内环境影响,需要科学上网
  • ​Gitee​​是我个人在使用的,国内比较著名的提供代码托管服务的一款产品,支持创建私有仓库,也可以根据自己需要选择是否需要开通企业版本

以上的都属于公共云服务,一般企业会自己搭建私有云仓库,虽然Git也提供了相对应的功能,但是我们选择更现代,功能更全的 Git 服务器

GitLab

GitLab 是一个用于仓库管理系统的开源项目,使用Git作为代码管理工具,并在此基础上搭建起来的Web服务。可以说是企业自建私有仓库的首选。

接下里我们就使用GitLab来搭建一个代码托管平台

安装

? 需要注意的是:安装GitLab服务器最低配置为4GB

接下来采用原生安装和Docker安装方式,大家任选其一

服务器安装
  1. 首先,更换GitLab的下载源。这里选择清华源。

vim /etc/yum.repos.d/gitbal-ce.repo

[gitlab-ce]
name=Gitlab CE Repository
baseurl=https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el$releasever/
gpgcheck=0
enabled=1
  1. 开始执行下载安装

yum makecache && yum install -y gitlab-ce
  1. 基础配置

服务器安装方式需要先进行简单的配置,通过编辑​​/etc/gitlab/gitlab.rb​​下的内容进行操作

# 对外访问的地址
external_url 'http://域名或者IP地址:端口'

根据需要选择开启配置,比如smtp

然后执行​​gitlab-ctl reconfigure​​重新配置并起到了启动服务的作用

  1. 启动服务

通过​​gitlab-ctl​​来执行相关操作,比如启动服务,查看状态等

# 查看启动状态
gitlab-ctl status
# 重启
gitlab-ctl restart
Docker安装

Docker发展至今已经是一个成熟的技术,通过自成容器的方式进行资源隔离,并且能够充分利用我们的服务器资源。放心大胆的用吧。

如果对Docker和DockerCompose不了解的同学别急,后面会有专门的介绍
创建docker-compose.yml

version: '3'
services:
gitlab:
image: 'gitlab-jh.tencentcloudcr.com/omnibus/gitlab-jh:latest'
restart: always
container_name: gitlab
environment:
GITLAB_OMNIBUS_CONFIG: |
external_url 'http://IP或域名:端口或者不写'
gitlab_rails['gitlab_shell_ssh_port'] = 2224
ports:
- '宿主机端口:端口'
- '2224:2224'
- '443:443'
volumes:
- '/opt/gitlab/config:/etc/gitlab'
- '/opt/gitlab/logs:/var/log/gitlab'
- '/opt/gitlab/data:/var/opt/gitlab'

执行​​docker-compose up -d​​​等待执行完成,通过​​docker-compose logs -f​​查看日志

初始登录密码&修改密码

GitLab超级管理账户为 root ,然后通过​​cat /etc/gitlab/initial_root_password​​查看初始登录密码,方便登录Web界面

Docker安装需要先进入到容器内部才能进行查看 ​​docker exec -it gitlab cat /etc/gitlab/initial_root_password​

这里登录进去之后最好修改一下初始密码,修改方式如图。修改完成之后需要重新登录

深入浅出DevOps:版本控制Git&Gitlab

实战操作:推送本地项目到远程仓库

安装配置完成之后,整体的操作就和使用GithubGitee是一样的了,我们这里就快速在本地创建一个项目,然后将其推送到远程仓库上

这里我采用SpringBoot项目

深入浅出DevOps:版本控制Git&Gitlab

现在,本地项目已经创建好了,机智的大家肯定也做得到,接下来开始推送远程仓库

  1. 首先,现在GitLab上创建一个新项目,也可以说是一个仓库

深入浅出DevOps:版本控制Git&Gitlab

深入浅出DevOps:版本控制Git&Gitlab

  1. 在仓库创建完成之后,初始化的README.md文件中记录了一些基本信息,同时我们也可以对其进行修改。接下来就开始提交我们的代码吧

git init 
git remote add origin http://192.168.1.8:88/root/devops_app.git
git fetch && git checkout main
git add .
git config user.email "email" && git config user.name "name"
git commit -m "first commit"
git push origin main

完整执行命令如上,到这里就已经能够能够将我们本地的文件推送到Gitlab了

最后

发表评论

相关文章