Git&Gitlab开发流程与运维管理

作者

刘畅

时间

2020-10-31

实验系统版本centos7.5

主机名称

ip地址

配置

安装软件

controlnode

172.16.1.120

4核/8G/60G

docker、git、gitlab

slavenode1

172.16.1.121

2核/2G/60G

docker、git、Runner

注:本文档docker的部署就不赘述了,可以参考docker部署文档。

目录

1 Git分布式版本控制系统 1

1.1
git简介 1

1.2
git部署 2

1.3
Git客户端配置使用者 3

1.4
Git工作区 4

1.5
Git常用命令 4

1.6
Git分支管理 6

1.7
Git分支与上线发布流程 7

2 Gitlab图形页面版本控制系统 7

2.1
Gitlab简介 7

2.2
Gitlab部署(docker方式) 8

2.3
Gitlab基本配置 9

2.4
Gitlab常用管理命令 16

2.5
Gitlab使用流程 17

2.6
gitlab两种克隆方式 24

2.7
Gitlab备份与恢复 26

2.8
Gitlab
CI/CD初探 28

3 补充 34

3.1
git
clone指定branch或tag 34

3.2
tag 34

3.3
Linux发行版,存放CA证书文件的位置可能是下面这些 36

3.4
gitlab windos客户端(gitbash、海龟svn) 36

1 Git分布式版本控制系统

前言:

自动化运维架构

1.1
git
简介

1 Git是什么

目前世界上最流程的开源分布式版本控制系统。

2 什么是版本控制系统

版本控制是指对软件开发过程中各种程序代码、配置文件及说明文档等文件变更的管理。

是一种文件存储系统。

3 集中式与分布式版本控制系统

分布式相比集中式有以下好处:

(1)
集中式,如果服务器宕机,无法进行代码提交、版本管理。

(2) 分布式,可以在本地进行版本管理,你可以选择合适的时候将本地版本推送到远程服务器。

(3)
分布式比集中式数据安全性高,例如集中式,服务器故障数据丢失风险大。

1.2
git部署

在172.16.1.120节点上操作

1 安装

# yum
install git -y

说明:git只是一个工具,并没有守护进程。

2 git 创建仓库

为方便开发者交换数据,分布式版本控制系统一般会准备一台服务器充当“中央服务器”,开发者一般借助SSH实现与这台服务器通信。

(1)
添加一个用户,用于ssh连接认证(不添加,使用root用户也行,因为安全性,不建议这么做)

# useradd git

# echo "git@123456" | passwd --stdin
git

(2)
新建一个项目仓库

[root@controlnode ~]# su - git

[git@controlnode ~]$ mkdir -p
demo.git

[git@controlnode ~]$ cd demo.git/

# 说明:".git"结尾代表该文件夹是一个git仓库,是一种规范,拉取仓库是没有该后缀的。

[git@controlnode ~]$ git init --bare

[git@controlnode demo.git]$ pwd

/home/git/demo.git

[git@controlnode demo.git]$ ls

# 看不到仓库中具体的文件

(3)
在开发者电脑使用git命令拉取这个项目仓库代码

在172.16.1.121节点上操作

1) 安装git

# yum install git -y

2) 交互式认证

# git clone git@172.16.1.120:/home/git/demo.git

命令说明:

git clone # git拷贝命令

git@172.16.1.120 # ssh远程到git用户

:/home/git/demo.git # 远程主机git用户下的git仓库地址

# ls -la demo/.git/

3) SSH密钥免交互式认证

有时提交代码频率挺高,每次输入密码挺麻烦,可以配置SSH密钥对实现免交互认证。

生成ssh密钥对(一路回车)

# ssh-keygen

将id_rsa.pub公钥内容添加到git服务器git账号/home/git/.ssh/authorized_keys

# ssh-copy-id git@172.16.1.120

携带id_rsa私钥进行SSH认证

# git clone
git@172.16.1.120:/home/git/demo.git

1.3
Git客户端配置使用者

1 配置使用者信息

# git config --global user.name liuchang

# git config --global user.email liuchang@qq.com

2 查询使用者信息

# git config --list

3 删除使用者信息

# git config --global --unset
user.name

# git config --global --unset
user.email

1.4
G
it工作区

git有三个常用的工作区

(1)
工作区:添加、删除和编辑文件

(2)
暂存区:标记文件等待提交

(3)
仓库区(本地):对文件进行版本管理

1.5
G
it常用命令

1.6
git工作流程(同样适用gitlab)

1克隆远程版本库

# git clone <url>

2 配置使用者信息

# git config --global user.name <用户名>

# git config --global user.email <邮箱地址>

3 新建开发分支并进入该分支

# git
branch <分支名>

# git
checkout <分支名>

4 将当前分支下修改的文件添加到暂存区

# git add .

5 提交当前分支的暂存区到仓库区

# git
commit -m "<描述信息>"

6 查看当前分支的历史提交记录

# git log

7 将当前分支的本地代码推送到远程服务器

# git push <remote>
<branch>

8获取当前分支别人提交的最新代码

# git pull <remote>
<branch>

注意:

(1) 不同分支之间的数据是不同的。

(2) 创建新的分支时,新分支会继承master分支的所有数据。

(3)
将其它分支文件merge到master分支,如果文件名相同,会覆盖master分支中的文件。

(4)
git pull |
git push
<url
branch> 在master分支下<url branch>默认都是origin master。在pull

或push的时候先切换到相应的本地分支。

1.6
G
it分支管理

1 在实际的项目开发中,一个项目会存在多个分支,这些分支大致分为两类:

(1)
master 主分支,最终上线分支,具有质量保证的、可正常运行的分支,禁止直接代码提交。

(2)
develop 测试分支,用于合并feature分支。

(3)
release
预发布分支,由feature分支合并,测试通过后合并到master分支。

(4)
feature 新功能开发分支,开发完合并到develop,进行集成测试。

2 分支管理有常用命令

(1) git branch -a

# 查看分支(你当前所在的分支会用"*"号标起来),-a表示远程仓库的存在的分支

(2)
git
branch <branch>

# 新建分支

(3) git branch -D <branch>

# 删除分支

(2) git
checkout <branch>

# 切换到指定分支或者标签

(3) git
merge <branch>

# 合并指定分支到当前分支

1.7
G
it分支与上线发布流程

2 Gitlab图形页面版本控制系统

2.1
Gitlab简介

1 GitLab是一个开源的图形代码版本管理系统,使用Git作为代码版本控制工具,并在此基础上集成开发了很多企业级实用功能。例如:

(1)
图形页面

(2)
角色权限控制

(3)
Issue问题跟踪

(4)
在线代码编辑

(5)
项目wiki

(6)
CI/CD集成发布

(7)
等等

2 Git有三个类

(1) Git

# 本地版本控制工具。

(2) Github,Gitee

# 公共代码托管仓库,对互联网用户开放。

(3) GitLab

主要用于企业内部自建代码版本管理系统。

2.2
Gitlab部署(docker方式)

在172.16.1.120节点上操作

1 启动容器

# mkdir /opt/gitlab

# GITLAB_HOME=/opt/gitlab

# docker run --detach \

--hostname gitlab.lc.com \

--publish 443:443 --publish 80:80 --publish 2222:22
\

--name gitlab \

--restart always \

--volume $GITLAB_HOME/config:/etc/gitlab
\

--volume $GITLAB_HOME/logs:/var/log/gitlab
\

--volume $GITLAB_HOME/data:/var/opt/gitlab
\

gitlab/gitlab-ce:latest

说明:本地目录和容器目录的对应关系

补充:

(1)
查看gitlab版本号

# docker exec -it gitlab bash

root@gitlab:/# cat
/opt/gitlab/embedded/service/gitlab-rails/VERSION

13.5.1

(2)
由于gitlab的镜像比较大(2GB左右),为了方便以后部署和gitlab

备份数据还原时保持版本的一致性,这里将gitlab镜像导出来。

# docker save -o gitlab-ce-13_5_1.tar
gitlab/gitlab-ce:latest

# docker
load -i gitlab-ce-13_5_1.tar

2 访问gitlab

(1)
在浏览器中输入"http://172.16.1.120/"地址

(2) 修改root用户密码

说明:

密码最少为8位,我这里的密码为 12345678

(3)
登录gitlab

2.3
Gitlab基本配置

1 Gitlab涉及的组件

[root@controlnode ~]# docker exec -it  gitlab
bash

root@gitlab:/# gitlab-ctl
service-list

alertmanager*

gitaly*

gitlab-exporter*

gitlab-workhorse*

grafana*

logrotate*

nginx*

postgres-exporter*

postgresql*

prometheus*

puma*

redis*

redis-exporter*

sidekiq*

sshd*

root@gitlab:/# exit

exit

[root@controlnode ~]#

2 系统配置

(1)
个人设置

1) 设置中文

(2)
全局设置(管理中心->设置->通用)

(1)
了解git访问协议

可见性与访问控制

(2)
关闭注册

注册限制

(3)
关闭头像(该头像会引用第三方网站的图片,会导致gitlab变慢)

帐户和限制

(4)
设置登录页面信息

登录限制

3 配置SMTP发送邮件

(1)
修改配置参数

# vim /opt/gitlab/config/gitlab.rb

gitlab_rails['time_zone'] =
'Asia/Shanghai'

gitlab_rails['smtp_enable'] = true

gitlab_rails['smtp_address'] =
"smtp.163.com"

gitlab_rails['smtp_port'] = 25

gitlab_rails['smtp_user_name'] =
"hyjy2504164765@163.com"

gitlab_rails['smtp_password'] =
"linux123"

gitlab_rails['smtp_domain'] =
"163.com"

gitlab_rails['smtp_authentication'] =
"login"

gitlab_rails['smtp_enable_starttls_auto'] =
true

gitlab_rails['smtp_tls'] = false

gitlab_rails['gitlab_email_from'] =
'hyjy2504164765@163.com'

(2)
重启gitlab容器

# docker restart gitlab

(3)
测试邮件功能

[root@controlnode ~]# docker exec -it gitlab
bash

root@gitlab:/# gitlab-rails console

irb(main):001:0>
Notify.test_email('2504164765@qq.com', 'gitlab.lc.com',
'test').deliver_now

irb(main):002:0> exit

root@gitlab:/# exit

exit

[root@controlnode ~]#

(4)
查看邮件

4 配置HTTPS

(1)
配置自签证书

1) 解压配置文件

[root@controlnode ~]# mkdir -p
cfssl_dir

[root@controlnode ~]# cd cfssl_dir/

[root@controlnode cfssl_dir]# tar -xzf
/root/cfssl.tar.gz

[root@controlnode cfssl_dir]# ls -l

[root@controlnode cfssl_dir]# mv cfssl*
/usr/bin/

2) 自签证书脚本

# cat certs.sh

cat > ca-config.json <<EOF

{

"signing": {

"default": {

"expiry":
"87600h"

},

"profiles":
{

"server":
{

"expiry":
"87600h",

"usages":
[

"signing",

"key
encipherment",

"server
auth",

"client
auth"

]

}

}

}

}

EOF

cat > ca-csr.json <<EOF

{

"CN":
"gitlab",

"key": {

"algo":
"rsa",

"size":
2048

},

"names": [

{

"C":
"CN",

"L":
"Beijing",

"ST":
"Beijing"

}

]

}

EOF

cfssl gencert -initca ca-csr.json | cfssljson -bare ca
-

cat > gitlab.lc.com-csr.json
<<EOF

{

"CN": "gitlab.lc.com",

"hosts": [],

"key": {

"algo":
"rsa",

"size": 2048

},

"names": [

{

"C":
"CN",

"L":
"BeiJing",

"ST":
"BeiJing"

}

]

}

EOF

cfssl gencert -ca=ca.pem -ca-key=ca-key.pem
-config=ca-config.json -profile=server gitlab.lc.com-csr.json | cfssljson -bare
gitlab.lc.com

# 注意修改脚本中的域名为gitlab.lc.com

[root@controlnode cfssl_dir]# ls -l

(2)
上传自签证书到/etc/gitlab/ssl目录

[root@controlnode cfssl_dir]# mkdir -p
/opt/gitlab/config/ssl/

[root@controlnode cfssl_dir]# cp -a gitlab.lc.com.pem
gitlab.lc.com-key.pem /opt/gitlab/config/ssl/

(3)
修改配置文件指定证书

[root@controlnode cfssl_dir]# vim
/opt/gitlab/config/gitlab.rb

external_url 'https://gitlab.lc.com'

# 访问使用的域名或者IP

nginx['enable'] = true

nginx['redirect_http_to_https'] =
true

# 设置开启自动将HTTP跳转到HTTPS

nginx['redirect_http_to_https_port'] =
80

nginx['ssl_certificate'] =
"/etc/gitlab/ssl/gitlab.lc.com.pem"

nginx['ssl_certificate_key'] =
"/etc/gitlab/ssl/gitlab.lc.com-key.pem"

(4)
重启gitlab容器

# docker restart gitlab

(5)
修改本地windows的hosts文件

C:\Windows\System32\drivers\etc\hosts

172.16.1.120 gitlab.lc.com

(6)
使用火狐浏览器访问(方便查看证书的信息) gitlab.lc.com

当在浏览器中输入gitlab.lc.com后会自动跳转到https://gitlab.lc.com/users/sign_in

证书信息如下:

2.4
Gitlab常用管理命令

gitlab-ctl

# Gitlab管理工具

# gitlab-ctl
status 查看gitlab服务状态

# gitlab-ctl
reconfigure 重新加载gitlab配置

gitlab-rails

gitlab-redis-cli

# 访问Redis数据库

gitlab-psql

# 访问PGSQL数据库

gitlab-rake

# 备份与恢复

gitlab-backup

# 12.1版本以后增加的备份与恢复工具

2.5
Gitlab使用流程

1 创建用户

(1) 管理中心—用户—新用户

(2)
创建用户完成后该用户会收到更改密码邮件,点击邮件中的链接即可

说明:liuchang用户密码修改为:liuchang@123456

(3)
密码修改完成后会发邮件通知你密码更改成功

2 创建群组

(1) 群组—您的群组—新建群组

群组有三种访问权限

1) Private

# 只有组成员才能访问,企业内部一般都用这个。

2) Internal

# 只要登录的用户就能看到,一般用于对IT部门公开的项目。

3) Public

# 不用登录也能看到,一般用于开源项目。

3 在群组里创建项目

群组—您的群组product—新建项目

点击"添加自述文件"链接,添加自述文件,提交到master主分支。

自述文件内容为this is mall system project.

4 群组邀请成员

(1)
群组—您的群组—product—成员

Gitlab用户在群组中的五种权限

(1)
Guest

# 可以创建issue、发表评论,不能读写版本库。

(2)
Reporter

# 可以克隆代码,不能提交,QA(品质保证)、PM(产品经理)可以赋予这个权限。

(3)
Developer

# 可以克隆代码、开发、提交、push,RD(研发工程师)开发者可以赋予这个权限。

(4)
Maintainer

# 可以创建项目、添加tag、保护分支、添加项目成员、编辑项目,核心RD负

# 责人可以赋予这个权限。

(5) Owner

# 可以设置项目访问权限 - 删除项目、迁移项目、管理组成员,开发组leader可以赋予这个权限。

(2)
邀请成功后被邀请用户会收到邮件提示

(3)
liuchang用户登录gitlab

1) 只能看到自己所在组的项目

2) 创建login.html文件并提交到新的dev分支

3) 查看dev分支

2.6
gitlab两种克隆方式

在172.16.1.121节点上操作

1 修改/etc/hosts文件

# vim /etc/hosts

172.16.1.120 gitlab.lc.com

2 基于HTTP基本认证,Gitlab用户名和密码

# git clone
https://gitlab.lc.com/product/mall.git

报错原因:

gitlab使用的是自签证书,客户端不认识这个https证书,需要把自签CA

证书导入到当前机器。

解决办法:

(1)
将自签CA证书手动导入ca-bundle.crt

# cat ca.pem
>>/etc/pki/tls/certs/ca-bundle.crt

(2)
再次通过http方式拉取代码

# git clone
https://gitlab.lc.com/product/mall.git

3 基于SSH认证,使用密钥对

(1) 修改配置文件指定gitlab对外暴露SSH端口

在172.16.1.120节点上操作

[root@controlnode ~]# vim
/opt/gitlab/config/gitlab.rb

gitlab_rails['gitlab_shell_ssh_port'] =
2222

# gitlab容器内ssh 22端口对外映射的端口是2222

重启gitlab容器

[root@controlnode ~]# docker restart
gitlab

可以发现gitlab的ssh克隆url地址发生了变化

(2)
ssh-keygen生成密钥对

这台机器在上面的操作过程中已经生成了密钥对,这里就不生成了。

(3)
为gitlab liuchang用户添加ssh公钥

点击用户头像->设置->SSH密钥->添加公钥(id_rsa.pub)

密钥添加成功后户发送邮件通知liuchang用户

(4)
测试:git clone免认证

# git clone
ssh://git@gitlab.lc.com:2222/product/mall.git

2.7
Gitlab备份与恢复

在172.16.1.120节点上操作

1 配置gitlab备份自动清理参数

[root@controlnode ~]# docker exec -it gitlab
bash

root@gitlab:/# vim
/etc/gitlab/gitlab.rb

gitlab_rails['manage_backup_path'] =
true

gitlab_rails['backup_path'] =
"/var/opt/gitlab/backups"

# 备份数据存放路径

gitlab_rails['backup_keep_time'] =
604800

# 备份数据多少天后清除,单位秒,604800秒=7天

root@gitlab:/# ls /var/opt/gitlab/backups/
-ld

# 重新加载配置

root@gitlab:/# gitlab-ctl
reconfigure

2 手动备份

(1) 备份数据

root@gitlab:/# gitlab-rake
gitlab:backup:create

root@gitlab:/# ls -l /var/opt/gitlab/backups/

(2) 备份配置文件

root@gitlab:/# gitlab-ctl backup-etc

root@gitlab:/# ls -l
/etc/gitlab/config_backup/

3 自动备份

通过定时任务实现

[root@controlnode ~]# crontab -l

*/5 * * * * /usr/sbin/ntpdate ntp.aliyun.com
&>/dev/null

* 02 * * 2-6 /usr/bin/docker exec gitlab
/usr/bin/gitlab-rake gitlab:backup:create &>/dev/null

* 02 * * 2-6 /usr/bin/docker exec gitlab
/usr/bin/gitlab-ctl backup-etc &>/dev/null

# 因为程序员大多都是在半夜上传代码,所以定时备份时间选在每周2到周六6的凌晨2点进行。

# 备份建议,备份路径放到共享文件系统中,保留周期为1-3年。

4 还原备份

由于某种原因,原gitlab服务器损坏,在一台新的服务器上搭建gitlab并回复之前的备份。

(1)
使用rpm包部署gitlab

1) 安装rpm包

# wget https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/gitlab-ce-13.5.1-ce.0.el7.x86_64.rpm

# yum install
gitlab-ce-13.5.1-ce.0.el7.x86_64.rpm

2)
启动gitlab

# gitlab-ctl reconfigure

# 查看gitlab服务是否正常启动(这些服务都是开机自启动的)

# 在浏览器中输入"http://172.16.1.120/"url地址即可访问。

(2)
还原

1) 拷贝备份文件

# cp -a
/tmp/1604330662_2020_11_02_13.5.1_gitlab_backup.tar
/var/opt/gitlab/backups/

# chown git.git
/var/opt/gitlab/backups/1604330662_2020_11_02_13.5.1_gitlab_backup.tar

2) 停写库服务

# gitlab-ctl stop unicorn

# gitlab-ctl stop puma

# gitlab-ctl stop sidekiq

3) 恢复数据

# gitlab-rake gitlab:backup:restore
BACKUP=1604330662_2020_11_02_13.5.1

4) 恢复配置文件

# cd /tmp/

# tar -xf
gitlab_config_1604330642_2020_11_02.tar

# \cp -a /tmp/etc/gitlab/*
/etc/gitlab/

5) 重新加载gitlab配置文件

# gitlab-ctl reconfigure

6) 访问验证

在浏览器中输入"https://gitlab.lc.com/"
url地址,使用liuchang用户依然可以

登录,登录后发现项目数据都还原回来了。

2.8
Gitlab CI/CD初探

1 介绍

(1)
持续集成(Continuous Integration,CI)

代码合并、部署、自动化测试都在一起,不断地执行这个过程,并对结果反馈。

(2)
持续交付(Continuous Delivery,CD)

是一种软件工程方法,让软件的产出过程在一个短周期内完成,以保障软件可

以稳定、持续的保持在随时可以发布的状态。与持续集成相比,持续交付偏重

点在于可交付的产物。

(3)
持续部署(Continuous Deployment,CD)

通过自动化部署的手段将软件频繁的交付,部署到期望的环境。

(4)
Gitlab CICD架构

2 安装Runner

在172.16.1.121节点上操作

安装文档:

https://docs.gitlab.com/runner/install/linux-repository.html

(1)
linux服务器rpm包方式安装

1) 安装

# For RHEL/CentOS/Fedora

# curl -L
https://packages.gitlab.com/install/repositories/runner/gitlab-runner/script.rpm.sh
| bash

# yum install gitlab-runner -y

2) 注册

# gitlab-runner register

步骤描述:

A 输入gitlab访问地址,例如https://gitlab.lc.com

B 输入token(从gitlab管理中心->概览->Runner获取)

C 输入描述

D 输入标签,流水线脚本根据标签来使用runner,如果多个,例如web,deploy

E 输入executor,这个是要用什么方式来执行脚本,输入shell

注册相关命令:

gitlab-runner register # 交互配置注册信息

gitlab-runner list # 保存在配置文件中的所有运行程序

gitlab-runner verify # 检查注册的runner是否可以连接

gitlab-runner unregister --url https://gitlab.lc.com
--token H73N-dpz9VLEHs7yF4JT

# 取消已注册的runner

(2)
linux服务器Docker服务器安装

1) 安装

# docker run -d --name gitlab-runner --restart
always \

-v /srv/gitlab-runner/config:/etc/gitlab-runner
\

-v /var/run/docker.sock:/var/run/docker.sock
\

--add-host=gitlab.lc.com:172.16.1.120
\

gitlab/gitlab-runner:latest

2) 注册(免交互)

注意:需要在gitlab-runner容器中导入CA证书

[root@slavenode1 ~]# docker exec -it gitlab-runner
bash

root@0050270bc606:/# gitlab-runner register
\

--non-interactive \

--url "https://gitlab.lc.com" \

--registration-token "H73N-dpz9VLEHs7yF4JT"
\

--description "slavenode1" \

--tag-list "web,php" \

--executor "shell" \

--run-untagged="true" \

--locked="false"

3 root用户登录到gitlab对注册的runner进行解锁

4 gitlab-runner配置免交互认证(使用容器runner测试)

在172.16.1.121节点上操作

[root@slavenode1 ~]# docker exec -it gitlab-runner
bash

root@0050270bc606:/# su -
gitlab-runner

gitlab-runner@0050270bc606:~$
ssh-keygen

gitlab-runner@0050270bc606:~$ ssh-copy-id
root@172.16.1.121

5 在172.16.1.121节点上安装用于测试的nginx服务

[root@slavenode1 ~]# yum install nginx
-y

[root@slavenode1 ~]# systemctl start
nginx

[root@slavenode1 ~]# systemctl enable
nginx

6 使用liuchang用户登录gitlab

(1)
在dev分支下创建新文件".gitlab-ci.yml",内容如下

stages:

- build

- test

- deploy

build:

stage: build

tags:

- php

script:

- echo "代码编译..."

test:

stage: test

tags:

- php

script:

- echo "测试代码..."

deploy:

stage:
deploy

tags:

- php

script:

- echo "部署项目..."

- scp login.html
root@172.16.1.121:/usr/share/nginx/html/

流水线脚本说明:

1) stages:CI步骤

2) job:具体执行逻辑,例如build

3) tags:runner标签

4) script:shell命令

5) 最后一步scp还需要runner主机与目标主

(2)
提交".gitlab-ci.yml"文件后会自动触发CICD流水线

说明:只要dev分支上有文件被修改就会触发CICD流水线脚本

1) 流水线

2) 作业

(3)
访问nginx服务

3 补充

3.1
git clone指定branch或tag

0 克隆代码

# git clone ssh://git@gitlab.lc.com:2222/product/mall.git

# gitlab上的liuchang用户

# cd mall

1 查看branch

# git branch -a

* master

remotes/origin/HEAD ->
origin/master

remotes/origin/dev

remotes/origin/master

2 使用指定branch

# git checkout dev

Branch dev set up to track remote branch dev from
origin.

Switched to a new branch 'dev'

3 clone指定branch或tag

# git
clone -b dev ssh://git@gitlab.lc.com:2222/product/mall.git

# git clone -b dev_v1.0
ssh://git@gitlab.lc.com:2222/product/mall.git

# 克隆tag到本地,分支名会显示"*
(no branch)",但是能看到tag。

3.2 tag

0 克隆代码

# git
clone ssh://git@gitlab.lc.com:2222/product/mall.git

# gitlab上的liuchang用户

# cd mall

# git checkout dev

# git branch

* dev

master

1 我们可以创建一个tag来指向软件开发中的一个关键时期,比如版本号更新的时候可以建

一个“v2.0”、“v3.1”之类的标签,这样在以后回顾的时候会比较方便。tag的使用很简单,主

要操作有:查看tag、创建tag、验证tag以及共享tag。

2 创建tag

(1) 创建轻量级tag,这样创建的tag没有附带其他信息

# git tag dev_v1.0

(2) 带信息的tag,-m后面带的就是注释信息,这样在日后查看的时候会很有用

# echo "this is index html" >
index.html

# git add .

# git commit -m "index.html"

# git tag -a dev_v2.0 -m 'second version'

(3) 共享tag

我们在执行git
push的时候,tag是不会上传到服务器的,比如现在的gitlab,创

建tag后git push,在gitlab网页上是看不到tag的,为了共享这些tag,你必须

# git push origin dev_v1.0

或者将所有tag一次全部push到github上

# git push origin --tags

3 查看tag

(1) 查看tag,列出所有tag,列出的tag是按字母排序的,和创建时间没关系

# git tag

dev_v1.0

dev_v2.0

(2) 查看指定版本的tag

# git tag -l 'dev_v*'

dev_v1.0

dev_v2.0

(3) 显示指定tag的信息

# git show dev_v2.0

3 删除tag

(1) 删除本地tag

# git tag -d dev_v1.0

(2)
删除gitlab远端指定的tag

# git push origin :refs/tags/dev_v1.0

4 创建一个基于指定tag的分支

# git checkout -b dev_v2.0-1
dev_v2.0

5 注意(创建tag必须要在需要打tag的分支下进行,查看tag查看的是全局所有的tag(可以在任意分支下查看所有的tag))

使用git
checkout tag即可切换到指定tag,例如:git checkout
dev_v1.0。切换到tag历史

记录会处在分离头指针状态,这个时候修改是很危险的,在切换回主线时如果没有合并,

之前的修改提交基本都会丢失,如果需要修改可以尝试git
checkout -b branch tag创建一

个基于指定tag的分支,例如:git checkout -b dev_v2.0-1
dev_v2.0这个时候就会在分支

上进行开发,之后可以切换到主线合并。

3.3
Linux发行版,存放CA证书文件的位置可能是下面这些

/etc/pki/tls/certs/ca-bundle.crt

/etc/ssl/certs/ca-certificates.crt

/etc/ssl/ca-bundle.pem

/etc/ssl/cert.pem

/usr/local/share/certs/ca-root-nss.crt

3.4
gitlab
windos客户端(gitbash、海龟svn)

gitbash可以通过ssh-keygen命令生成密钥对,用于和gitlab免交互ssh方式拉取代码。

海龟svn需要url的方式拉取gitlab上的代码,由于windows上没有自签的ca证书,会

报无法验证证书的有效性而无法拉取代码,在网上试了将自签ca证书导入到(cmd[mmc])

"受信任的根证书颁发机构"也不行。

Git&Gitlab开发流程与运维管理的更多相关文章

  1. git 一般的开发流程中的代码管理

    一般的开发流程中的代码管理 1. 从版本库中下载代码 git clone ssh://wenbin@192.168.1.3:29418/mustang-web 2. 针对某个feature(比如ins ...

  2. GitLab开发流程图示、Git命令一张图

    GitLab开发流程图示.Git命令一张图 一.GitLab开发流程图示 二.Git命令一张图 作图工具:ProcessOn 一.GitLab开发流程图示 二.Git命令一张图

  3. 企业该如何进行高效IT运维管理

    企业该如何进行高效IT运维管理 在企业内部也是一样,当大量的生产和经营数据集中在数据中心,一旦人们与数据中心因为IT故障而失去联系,停滞的也许不是个人应用受阻这样简单的后果.我们谁也不想看到自己企业的 ...

  4. 15-MySQL DBA笔记-运维管理

    第15章 运维管理 随着各种技术的快速发展,现今的DBA可以比以前的DBA维护多得多的数据库实例.DBA已经越来越像一个资源的管理者,而不是简单的操作步骤执行人.本章将为读者介绍规模化运维之道.首先, ...

  5. 谈谈我的windows服务器运维管理

    我们开发的页游General War(http://gw.gamebox.com)上线运营也有半年多了,服务器的开发到运维基本都由我一手包办,在服务器上线之后我们又招了一个程序员接手后续功能的开发,而 ...

  6. 系统批量运维管理器Fabric详解

    系统批量运维管理器Fabric详解 Fabrici 是基于python现实的SSH命令行工具,简化了SSH的应用程序部署及系统管理任务,它提供了系统基础的操作组件,可以实现本地或远程shell命令,包 ...

  7. 分享一篇 Git Web 开发流程

    分享一篇 Git Web 开发流程 web 项目如何进行 git 多人协作开发 https://segmentfault.com/a/1190000018165757

  8. 不吹不黑,赞一下应用运维管理的cassacdra

    不吹不黑的为菊厂的应用运维管理AOM点个赞.Why? 某菊厂应用运维管理工具AOM每天处理着亿级条数据,这么多数据是怎么存储的呢? 说到数据存储就会想到关系型数据库,比如mysql,oracle,sy ...

  9. 基于.net的微服务架构的开发测试环境运维实践

    眼下,做互联网应用,最火的架构是微服务,最热的研发管理就是DevOps, 没有之一.微服务.DevOps已经被大量应用,它们已经像传说中的那样,可以无所不能.特来电云平台,通过近两年多的实践,发现完全 ...

随机推荐

  1. JAVA基础——运算符号

    运算符(java) 算数运算符:+,-,*,/,%(取余),++,-- 赋值运算符:= 关系运算符:<, >, >= ,<= ,== , != 逻辑运算符:&& ...

  2. IT菜鸟之计算机硬件

    现在的人们几乎无时无刻都会碰到计算机!不管是桌面计算机.笔记本电脑.平板计算机.智能型手机等等,这些东西都算计算机.虽然接触的怎么多,但是,我们一般很少会专门了解计算机内部的构成,下面就是自己在听课结 ...

  3. 修改mysql中数据库存储主路径

    一.首先把mysql的服务先停掉. 二.更改MySQL配置文件My.ini中的数据库存储主路径 打开文件夹C:\ProgramData\MySQL\MySQL Server 5.7中的my.ini文件 ...

  4. 用 Python 写个贪吃蛇,保姆级教程!

    本文基于 Windows 环境开发,适合 Python 新手 本文作者:HelloGitHub-Anthony HelloGitHub 推出的<讲解开源项目>系列,本期介绍 Python ...

  5. celery Django 简单示例

    一.目录结构 二.创建worker文件夹 __init__.py # -*- coding:utf-8 -*-import osfrom celery import Celery, platforms ...

  6. CUDA Pro:通过向量化内存访问提高性能

    CUDA Pro:通过向量化内存访问提高性能 许多CUDA内核受带宽限制,而新硬件中触发器与带宽的比率不断提高,导致带宽受限制的内核更多.这使得采取措施减轻代码中的带宽瓶颈非常重要.本文将展示如何在C ...

  7. onnx算子大全

    本文通过此脚本从def文件自动生成.不要直接修改,而是编辑算子定义. 对于算子输入/输出的可辩别的,它可以是可辩别的.不可辩别的或未定义的.如果未指定变量的可辩别的,则该变量具有未定义的可辩别的. a ...

  8. jmeter工作目录介绍、jmeter元件及组件介绍

    一.jmeter工作目录介绍: bin:放置各项配置文件(如日志设置.JVM设置).启动文件.启动Jar包.示例脚本等: docs:放置JMeter API的离线帮助文档: extras:JMeter ...

  9. postman之内建变量的基础应用

    一.Postman有以下内建变量,适合一次性使用:{{$guid}}//生成GUID{{$timestamp}}//当前时间戳{{$randomInt}}//0-1000的随机整数 简单应用举例: 二 ...

  10. SpringBoot原理深入及源码剖析(一) 依赖管理及自动配置

    前言 传统的Spring框架实现一个Web服务需要导入各种依赖jar包,然后编写对应的XML配置文件等,相较而言,SpringBoot显得更加方便.快捷和高效.那么,SpringBoot究竟是如何做到 ...