Pre-commit和post-deploy已死,请用Git分支【彩世界彩
分类:彩世界彩票注册平台官网

post-deploy部署后代码审查

commit

commit message可以用于追踪问题,所以
对于Git的commit的message,尽量详细的说明本次提交主要干了什么,是fix 什么bug,开发什么特性,还是update 某个功能点,这同样有助于进行code review

1.2 git工作流程的简介

 

在正式使用前,我们还需要弄清楚Git的三种重要模式,分别是已提交、已修改、已暂存

 彩世界彩票注册平台官网 1

已提交(committed):表示数据文件已经顺利提交到Git数据库中。

已修改(modified):表示数据文件已经被修改,但未被保存到Git数据库中。

已暂存(staged):表示数据文件已经被修改,并会在下次提交时提交到Git数据库中。

 

提交前的数据文件可能会被随意修改或丢失,但只要把文件快照顺利提交到Git数据库中,那就可以完全放心了,流程为:

1.在工作目录中修改数据文件。

2.将文件的快照放入暂存区域。

3.将暂存区域的文件快照提交到Git仓库中。

 

彩世界彩票注册平台官网 2

Git tips

#查看提交暂存区和版本库中文件的差异
git diff--cached

 gitlog --stat             #查看简单的diff结果,可以加上--stat参数

git tag -a v1.4 -m 'my version 1.4'
git log --oneline
#放弃工作区的修改
  git checkout <file-name>
#存储当前的修改,但不用提交commit
  git stash

 # 切换到Master分支
  git checkout master
  # 对Develop分支进行合并
  git merge --no-ff develop
  
#删除feature分支:
  git branch -d feature-x
#删除远程分支:
  git push origin --delete <branchName>

一个代码片段收集功能可以轻松实现代码复用,便于日后有需要的时候进行查找。

[git 版本管理]http://www.ruanyifeng.com/blog/2012/07/git.html

共同的事

1.git简介

前言:

  git是一套内容寻址文件系统(content-addressable),在此之上提供了一个 VCS 用户界面。

Git的功能特性:

从一般开发者的角度来看,git有以下功能:

1、从服务器上克隆完整的Git仓库(包括代码和版本信息)到单机上。

2、在自己的机器上根据不同的开发目的,创建分支,修改代码。

3、在单机上自己创建的分支上提交代码。

4、在单机上合并分支。

5、把服务器上最新版的代码fetch下来,然后跟自己的主分支合并。

6、生成补丁(patch),把补丁发送给主开发者。

7、看主开发者的反馈,如果主开发者发现两个一般开发者之间有冲突(他们之间可以合作解决的冲突),就会要求他们先解决冲突,然后再由其中一个人提交。如果主开发者可以自己解决,或者没有冲突,就通过。

8、一般开发者之间解决冲突的方法,开发者之间可以使用pull 命令解决冲突,解决完冲突之后再向主开发者提交补丁。

 

从主开发者的角度(假设主开发者不用开发代码)看,git有以下功能:

1、查看邮件或者通过其它方式查看一般开发者的提交状态。

2、打上补丁,解决冲突(可以自己解决,也可以要求开发者之间解决以后再重新提交,如果是开源项目,还要决定哪些补丁有用,哪些不用)。

3、向公共服务器提交结果,然后通知所有开发人员。

 

 

集中式版本控制系统:

最显而易见的缺点是中央服务器的单点故障。如果宕机一小时,那么在这一小时内,谁都无法提交更新,也就无法协同工作。要是中央服务器的磁盘发生故障,碰巧没做备份,或者备份不够及时,就还是会有丢失数据的风险。最坏的情况是彻底丢失整个项目的所有历史更改记录,而被客户端 提取出来的某些快照数据除外,但这样的话依然是个问题,你不能保证所有的数据都已经有人事先完整提取出来过。本地版本控制系统也存在类似问题,只要整个项 目的历史记录被保存在单一位置,就有丢失所有历史更新记录的风险。就像图下图所示。

彩世界彩票注册平台官网 3

集中式版本控制系统(CVS,Subversion,Perforce,Bazaar 等等)每次记录有哪些文件作了更新,以及都更新了哪些行的什么内容,就像图下图所示。

彩世界彩票注册平台官网 4

分布式系统:

这类系统中,像 Git,Mercurial,Bazaar 以及 Darcs 等,客户端并不只提取最新版本的文件快照,而是把原始的代码仓库完整地镜像下来。这么一来,任何一处协同工作用的服务器发生故障,事后都可以用任何一个镜 像出来的本地仓库恢复。因为每一次的提取操作,实际上都是一次对代码仓库的完整备份,就像图下图所示。

 彩世界彩票注册平台官网 5

Git 和其他版本控制系统的主要差别在于,Git 只关心文件数据的整体是否发生变化,而大多数其他系统则只关心文件内容的具体差异。Git 并不保存这些前后变化的差异数据。实际上,Git 更像是把变化的文件作快照后,记录在一个微型的文件系统中。每次提交更新时,它会纵览一遍所有文件的指纹信息并对文件作一快照,然后保存一个指向这次快照 的索引。为提高性能,若文件没有变化,Git 不会再次保存,而只对上次保存的快照作一链接。Git 的工作方式就像图下图所示。

彩世界彩票注册平台官网 6

集中式和分布式的区别:

先说集中式版本系统,版本库是集中放在中央服务器的,干活的时候,都是用自己的电脑,从中央处理器取得最新的版本,干完活后,在把自己的活推送给服务器。中央处理器就好比一个图书馆,大家都从图书馆借书,然后回家自己看,看完后再返回给图书馆。集中式版本系统的缺点是必须联网才可以干活,如果互联网,网速慢的话,可能提交一个10M的文件就得很长时间,如果中央服务器快掉的话,所有人对没法干活了
    分布式版本系统有什么不同呢,首先、分布式版本系统没有中央处理器,每个人的电脑都是完整的版本库,这样,你工作的时候就不需要联网的,那多个人如何协作呢,比方说自己在电脑上修改了A,你的同时也在电脑上修改了A,这时,你们俩之间只需把各自的修改退送给对方,就可以互相看到对方的修改了
    和集中式版本控制相比,分布式版本控制系统更安全,因为每个的电脑都有完整的版本库,某一个人的电脑坏掉不要紧,从其他人那里复制一个就可以了
    版本,顾名思义,就是记录每个模块的改动,并为每次改动编上序号,个人理解:用来记录和区分你的每次操作。
    在实际使用分布式版本控制系统的时候,其实很少在两人之间的电脑上推送版本库的修改,因为可能你们俩不在一个局域网内,两台电脑互相访问不了,也可能今天 你的同事病了,他的电脑压根没有开机。因此,分布式版本控制系统通常也有一台充当“中央服务器”的电脑,但这个服务器的作用仅仅是用来方便“交换”大家的 修改,没有它大家也一样干活,只是交换修改不方便而已。

 

Git 与SVN 比较

SVN(Subversion)是当前使用最多的版本控制工具。与它相比较,Git 最大的优势在于两点:易于本地增加分支和分布式的特性。

下面两幅图可以形象的展示Git与SVN的不同之处:  

1)本地增加分支

图中Git本地和服务器端结构都很灵活,所有版本都存储在一个目录中,你只需要进行分支的切换即可达到在某个分支工作的效果

而SVN则完全不同,如果你需要在本地试验一些自己的代码,只能本地维护多个不同的拷贝,每个拷贝对应一个SVN服务器地址

举一个实际的例子:

使用SVN作为版本控制工具,当正在试图增强一个模块,工作做到一半,由于会改变原模块的行为导致代码服务器上许多测试的失败,所以并没有提交代码。

这时候假如现在有一个很紧急的Bug需要处理, 必须在两个小时内完成。我只好将本地的所有修改diff,并输出成为一个patch文件,然后回滚有关当前任务的所有代码,再开始修改Bug的任务,等到修改好后,在将patch应用回来。前前后后要完成多个繁琐的步骤,这还不计中间代码发生冲突所要进行的工作量。

可是如果使用Git, 我们只需要开一个分支或者转回到主分支上,就可以随时开始Bug修改的任务,完成之后,只要切换到原来的分支就可以优雅的继续以前的任务。只要你愿意,每一个新的任务都可以开一个分支,完成后,再将它合并到主分支上,轻松而优雅。

2)分布式提交

Git 可以本地提交代码,所以在上面的图中,Git有利于将一个大任务分解,进行本地的多次提交

而SVN只能在本地进行大量的一次性更改,导致将来合并到主干上造成巨大的风险

3)日志查看

Git 的代码日志是在本地的,可以随时查看

SVN的日志在服务器上的,每次查看日志需要先从服务器上下载下来

例如:代码服务器在美国,当每次查看几年前所做的工作时,日志下载可能需要十分钟,这不能不说是一个痛苦。但是如果迁移到Git上,利用Git日志在本地的特性,查看某个具体任务的所有代码历史,每次只需要几秒钟,大大方便了工作,提高了效率。

当然分布式并不是说用了Git就不需要一个代码中心服务器,如果你工作在一个团队里,还是需要一个服务器来保存所有的代码的。

 

 

彩世界彩票注册平台官网 7

Git 使用原则

  • 不建议留任何未提交文件就去拉取,fetch也好,不要贪拉
  • 拉取不成功,解决冲突,提交不成功,解决冲突,解决不了冲突,请联系队友
  • commit 写好注释

2.1 安装服务相关命令

安装有可能的依赖:

yum install openssh-server

yum install postfix

yum install cronie

安装gitlab:

curl -sS #下载数据源

yum install gitlab-ce

安装完成后:

gitlab-ctl reconfigure    #使配置文件生效 但是会初始化除了gitlab.rb之外的所有文件

gitlab-ctl status         #查看状态

gitlab-ctl stop                #停服务

gitlab-ctl start               #起服务

gitlab-ctl tail                 #查看日志的命令(Gitlab 默认的日志文件存放在/var/log/gitlab 目录下)

 

 

如下表示启动成功:(全是run,有down表示有的服务没启动成功)

 彩世界彩票注册平台官网 8

然后打开浏览器输入ip或者域名

预提交审核要求在提交之前检查代码是否存在错误。Sid Sijbrandij表示,预先提交审核是有意义的,新代码在引入代码库之前需要用他来做评估。但是通过分布式版本控制,你可以用Git分支来做同样的事情。在Git之前,分支使用代价太高,在Subversion等基于文件和目录复制分支的版本控制系统中无法时常使用。

Stages

Stages表示构建阶段,说白了就是上面提到的流程。我们可以在一次 Pipeline 中定义多个 Stages,这些 Stages 会有以下特点:

  • 所有 Stages 会按照顺序运行,即当一个 Stage 完成后,下一个 Stage 才会开始
  • 只有当所有 Stages 完成后,该构建任务 (Pipeline) 才会成功
  • 如果任何一个 Stage 失败,那么后面的 Stages 不会执行,该构建任务 (Pipeline) 失败

因此,Stages 和 Pipeline 的关系就是:

 -------------------------------------------------------- 
|                                                        |
|  Pipeline                                              |
|                                                        |
|   -----------       ------------        ------------   |
|  |  Stage 1  |---->|   Stage 2  |----->|   Stage 3  |  |
|   -----------       ------------        ------------   |
|                                                        |
 -------------------------------------------------------- 

每个阶段包含有一个或多个工序(jobs),比如先购料、组装、测试、包装再上线销售,每一次push或者MR都要经过流水线之后才可以合格出厂。而.gitlab-ci.yml正是定义了这条流水线有哪些阶段,每个阶段要做什么事。

Jobs表示构建工作,表示某个 Stage 里面执行的工作。我们可以在 Stages 里面定义多个 Jobs,这些 Jobs 会有以下特点:

  • 相同 Stage 中的 Jobs 会并行执行
  • 相同 Stage 中的 Jobs 都执行成功时,该 Stage 才会成功
  • 如果任何一个 Job 失败,那么该 Stage 失败,即该构建任务 (Pipeline) 失败

所以,Jobs 和 Stage 的关系图就是:

 ------------------------------------------ 
|                                          |
|  Stage 1                                 |
|                                          |
|   ---------    ---------    ---------    |
|  |  Job 1  |  |  Job 2  |  |  Job 3  |   |
|   ---------    ---------    ---------    |
|                                          |
 ------------------------------------------ 

彩世界彩票注册平台官网 9

untitled1.png

端到端部署

https://v.qq.com/x/page/z03959pwc0r.html

彩世界彩票注册平台官网 10

http://115.28.84.155/org/index.do
http://123.56.64.36:9000/projects
http://115.28.86.238/

随着新业务的增加和老业务的不断优化,项目中的代码也在一直增加,当代码量达到几十万行的时候,人工审查肯定会费时费力,所以有了 SonarQube代码质量管理平台,通过配置审查规则,让程序帮你检测代码中潜在的bug,让耗时操作通过机器完成,节约人力成本

sonarQube能带来什么?
1.Bugs和漏洞
检测代码中的bug和漏洞

2.坏味道
检测代码中潜在的错误

3.重复
显然程序中包含大量复制粘贴的代码是质量低下的 sonar可以展示源码中重复严重的地方

4.结构
检测代码行数,代码的组成成分,和占用的百分比

5.注释量
检测代码注释的量

6.依赖关系
项目结构

彩世界彩票注册平台官网 11

图 1. 质量纬度

彩世界彩票注册平台官网 12

图 2. SonarQube 的服务架构

2.2 相关目录文件信息

相关目录:

.git/config                                                #版本库特定的配置设置,可用--file修改

~/.gitconfig                                              #用户特定的配置设置,可用--global修改

 

/var/opt/gitlab/git-data/repositories/root       #库默认存储目录

/opt/gitlab                                                 #是gitlab的应用代码和相应的依赖程序
/var/opt/gitlab                                           #此目录下是运行gitlab-ctl reconfigure命令编译后的应用数据和配置文件,不需要人为修改配置
/etc/gitlab                                                        #此目录下存放了以omnibus-gitlab包安装方式时的配置文件,这里的配置文件才需要管理员手动编译配置
/var/log/gitlab                                           #此目录下存放了gitlab各个组件产生的日志

/var/opt/gitlab/backups/                              #备份文件生成的目录

相关文件:

/opt/gitlab/embedded/service/gitlab-rails/config      #配置文件(修改clone的ip地址)

/etc/gitlab/gitlab.rb                                    #设置相关选项进行配置(gitlab地址就在这)

/var/opt/gitlab/git-data                               #Git存储库数据(默认)

相关参考文档:https://docs.gitlab.com

分支参考文档:

"预先提交代码审查有些尴尬,因为没有一个很好的方式来引用它。它存在很多开发工具中,但你没有SHA或明确的方式来引用该版本。你很难知道运行的CI用的是那些代码。但是,如果你在提交后进行审查,你就可以对每次审查打上commit、甚至版本的签,并且更容易看到所引用的代码。但是如果使用post-deploy进行代码审查时,人们心态是,"如果有效,就继续下一步。"

Pipelines

Pipelines 是定义于.gitlab-ci.yml中的不同阶段的不同任务,里面可以包含多个流程,如安装依赖、运行测试、编译、部署测试服务器、部署生产服务器等流程。

任何提交或者 Merge Request 的合并都可以触发 Pipeline,如下图所示:

 ------------------             ---------------- 
|                  |  trigger  |                |
|   Commit / MR     ---------->     Pipeline    |
|                  |           |                |
 ------------------             ---------------- 

我把[Pipelines]理解为流水线,流水线包含有多个阶段(stages),

2.gitlab服务端

在gitlab流程结合cicd自动化栈实现了全栈DevOps生命周期管理。

Gitlab-runner

Gitlab-runner是.gitlab-ci.yml脚本的运行器,Gitlab-runner是基于Gitlab-CI的API进行构建的相互隔离的机器(或虚拟机)。GitLab Runner 不需要和Gitlab安装在同一台机器上,但是考虑到GitLab Runner的资源消耗问题和安全问题,也不建议这两者安装在同一台机器上。

Gitlab Runner分为两种,Shared runners和Specific runners。
Specific runners只能被指定的项目使用,Shared runners则可以运行所有开启Allow shared runners选项的项目。

![](file:///C:/Users/pbh/AppData/Local/Packages/Microsoft.Office.OneNote_8wekyb3d8bbwe/TempState/msohtmlclipclip_image001.png)

GitLab-Runner就是一个用来执行软件集成脚本的东西。你可以想象一下:Runner就像一个个的工人,而GitLab-CI就是这些工人的一个管理中心,所有工人都要在GitLab-CI里面登记注册,并且表明自己是为哪个工程服务的。当相应的工程发生变化时,GitLab-CI就会通知相应的工人执行软件集成脚本。如下图所示:

彩世界彩票注册平台官网 13

img

stages:

  - build

Job:

  stage: build
  only:
    - develop
    - master
  script:
    - echo "aa"

.gitlab-ci.yml 是配置CI用你的项目中做哪些操作, 这个文件位于仓库的根目录。

https://gitlab.com/gitlab-org/gitlab-ci-yml

1.4 git使用流程

1.先创建一个工程的目录mkdir test_project

2.cd test_project

3.git init 初始化git工作目录(git init –bare功能相同)

   git init的结果(这个隐藏的git目录里面的内容和--bare创建的相同)

彩世界彩票注册平台官网 14

   git init --bare 路径

彩世界彩票注册平台官网 15

4.touch readme 创建一个文件

5.git status 查看状态

  第一次查看,这个文件还没有添加到暂存区的

彩世界彩票注册平台官网 16

6.git add readme 将readme文件添加到暂存区

  既然有添加,那就有删除(此处说的是暂存区的操作,不会删除文件)

  git rm --cached readme   

7.git status 再次查看暂存区的状态

  将readme添加到暂存区后的状态

彩世界彩票注册平台官网 17

  1. git commit -m "first commit" 提交到自己的中央仓库(init就是创建自己的中央仓库) 

  2. git log查看日志(相当与svn的提交日志)

 彩世界彩票注册平台官网 18

到目前为止自己本地仓库就提交结束了

之后就是提交到远程仓库了

10 git remote –v 查看本地存储的远程仓库信息,如果是clone出来的工程这个结果如下

 彩世界彩票注册平台官网 19

origin 表示的是远程仓库的别名(默认为origin,也可以自己起,fetch更新类似于update,push推数据相当于commit)

如果不是clone的工程,就不会有任何结果,要自己添加,命令如下:

git remote add test ssh://root@10.0.0.5/usr/GitData/DingDang/.git

彩世界彩票注册平台官网 20

彩世界彩票注册平台官网 21

11.做完这步然后就是远程推数据了(必须保证本地仓库里面有提交,注意是本地仓库而不是暂存区)

git push test

到此自己创建的文件就推到了远程的git仓库了

12还有一个功能比较重要,本地仓库的版本回退

再提交一次,如下log:

 

git reset --hard HEAD^   #还原历史提交版本上一次

git reset --hard 版本号   #就是上图黄色的部分,仅需要前7位即可

如果回退过头了,log是看不到未来的版本号的,想看可以用git reflog查看

 

 

部署后审查会定期检查代码库中的改进部分。部署后审查通常定期进行,用来检查代码库的部分功能并确定是否可以进行改进。根据Sid的说法,这种方法已经没有意义,因为"代码已经在部署时,在生产环境中验证了,……所以你肯定不愿意再对它进行修改。"

issue

issue是项目管理中的重点,主要包括以下功能:

  1. 用于登记bug与需求
  2. 可以按照issue类型不同打上不同的tag
  3. 每个issue在每个project中有唯一的id
  4. 项目负责人可以@相应的开发进行开发
  5. 在经过单元测试和code review后,如果功能点符合,可以关闭相应的issue
  6. 可以通过gitlab的web界面进行相应的分析,比如按照tag和assignee进行筛选

1.3 git的命令简介

yum install git                                                         #安装Git

git config –global user.name “xubusi”                        #配置git使用用户

git config –global user.email “xubusi@mail.com”       #配置git使用邮箱

git config –global color.ui true                                  #加颜色

 

git config –list                                                        #所有配置的信息(上面的结果)

user.name=xubusi

user.email=xubusi@mail.com

color.ui=true

git的参数简介:

add                #添加文件内容至索引

bisect             #通过二分查找定位引入 bug 的变更

branch            #列出、创建或删除分支

checkout         #检出一个分支或路径到工作区

clone              #克隆一个版本库到一个新目录

commit           #记录变更到版本库

diff                #显示提交之间、提交和工作区之间等的差异

fetch              #从另外一个版本库下载对象和引用

grep                #输出和模式匹配的行

init                #创建一个空的 Git 版本库或重新初始化一个已存在的版本库

log                 #显示提交日志

merge            #合并两个或更多开发历史

mv                 #移动或重命名一个文件、目录或符号链接

pull                #获取并合并另外的版本库或一个本地分支(相当于git fetch和git merge)

push                #更新远程引用和相关的对象

rebase             #本地提交转移至更新后的上游分支中

reset                #重置当前HEAD到指定状态

rm                 #从工作区和索引中删除文件

show               #显示各种类型的对象

status              #显示工作区状态

tag                 #创建、列出、删除或校验一个GPG签名的 tag 对象

在该流程下,版本发布也是基于master分支来推进。

git

Git是一个开源的分布式版本控制系统,可以有效、高速的处理从很小到非常大的项目版本管理。Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件

1.5 git分支命令

Pre-commit和post-deploy已死,请用Git分支【彩世界彩票注册平台官网】。创建分支:

git branch linux                           #创建分支

git checkout linux                        #切换分支

git branch                                    #查看当前分支情况,当前分支前有*号

git add readme.txt                       #提交到暂存区

git commit -m “new branch”        #提交到git版本仓库

git checkout master                      #我们在提交文件后再切回master分支

分支合并:(合并前必须保证在master主干上)

git branch #查看在哪个位置

git merge Linux#合并创建的Linux分支(–no–ff默认情况下,Git执行”快进式合并”(fast-farward merge),会直接将Master分支指向Develop分支。使用–no–ff参数后,会执行正常合并,在Master分支上生成一个新节点。)

git branch -d linux#确认合并后删除分支

如果有冲突:

git merge linux 
#合并Linux分支(冲突)

Auto-merging readme.txt

CONFLICT (content): Merge conflict in readme.txt

Automatic merge failed; fix conflicts and then commit the result.

#那么此时,我们在master与linux分支上都分别对中readme文件进行了修改并提交了,那这种情况下Git就没法再为我们自动的快速合并了,它只能告诉我们readme文件的内容有冲突,需要手工处理冲突的内容后才能继续合并

自己修改完readme.txt文件后再次提交

 彩世界彩票注册平台官网 22彩世界彩票注册平台官网 23

–no–ff原理图

gitlab的分支流程折中了git和github两者的流程,更适合一般开发团队的使用,gitlab也基于该流程增加了很多代码审核的功能,将MR、代码审核、问题管理有机地结合在一个页面,并引入了专门的安全审核面板和基于角色的权限管理。

分支管理策略

一、主分支 Master

首先,代码库应该有一个、且仅有一个主分支。所有提供给用户使用的正式版本,都在这个主分支上发布。

master分支上存放的应该是随时可供在生产环境中部署的代码,它承担的责任就是:仅在发布新的可供部署的代码时才更新到master分支上的代码。当开发活动告一段落,产生了一份新的可供部署的代码时,master分支上的代码会被更新。同时,每一次更新,最好添加对应的版本号标签(TAG)。

二、开发分支 Develop

主分支只用来分布重大版本,日常开发应该在另一条分支上完成。我们把开发用的分支,叫做Develop。

develop分支是保存当前最新开发成果的分支,它承担的责任就是功能开发完毕等待最后QA的验收,通常这个分支上的代码也是可进行每日夜间发布的代码。当代码已经足够稳定时,就可以将所有的开发成果合并回master分支了。

三、临时性分支

除了常设分支以外,还有一些临时性分支,用于应对一些特定目的的版本开发。:

辅助分支是用于组织解决特定问题的各种软件开发活动的分支,它的生存周期伴随着它的功能完成而消失。辅助分支包括

  • 功能(feature)分支
  • 预发布(release)分支

  • 修补bug(fixbug)分支

这三种分支都属于临时性需要,使用完以后,应该删除,使得代码库的常设分支始终只有Master和Develop。

四、功能分支

第一种是功能分支,它是为了开发某种特定功能,从Develop分支上面分出来的。开发完成后,要再并入Develop。

彩世界彩票注册平台官网 24

img

功能分支的名字,可以采用feature-*的形式命名。

创建一个功能分支:

# 这里x可以定义为自己名字的缩写,比如hxg
git checkout -b feature-x develop

开发完成后,将功能分支合并到develop分支:

git checkout develop

git merge --no-ff feature-x

删除feature分支:

git branch -d feature-x      

五、预发布分支

第二种是预发布分支,它是指发布正式版本之前(即合并到Master分支之前),我们可能需要有一个预发布的版本进行测试。

预发布分支是从Develop分支上面分出来的,预发布结束以后,必须合并进Develop和Master分支。它的命名,可以采用release-*的形式。

创建一个预发布分支:

#这里版本号可以定义为3位,
git checkout -b release-1.2 develop

确认没有问题后,合并到master分支:

  git checkout master

  git merge --no-ff release-1.2

  # 对合并生成的新节点,做一个标签

  git tag -a 1.2

再合并到develop分支:

git checkout develop

git merge --no-ff release-1.2
 

最后,删除预发布分支:

git branch -d release-1.2

六、修补 bug 分支

最后一种是修补bug分支。软件正式发布以后,难免会出现bug。这时就需要创建一个分支,进行bug修补。

修补bug分支是从Master分支上面分出来的。修补结束以后,再合并进Master和Develop分支。它的命名,可以采用fixbug-*的形式。

彩世界彩票注册平台官网 25

img

创建一个修补bug分支:

 git checkout -b fixbug-0.1 master

修补结束后,合并到master分支:

git checkout master
git merge --no-ff fixbug-0.1
git tag -a 0.1.1
 

再合并到develop分支:

 git checkout develop

 git merge --no-ff fixbug-0.1

最后,删除"修补bug分支":

git branch -d fixbug-0.1

工具:

TortoiseGit,SourceTree

1.1 环境信息(系统自带)

[root@oldboyedu ~]# cat /etc/redhat-release

CentOS release 6.7 (Final)

[root@oldboyedu ~]# git --version

git version 1.7.1

 

注意:您应该至少有2GB的RAM可用于系统,而我们建议使用4GB RAM,以及4或8个CPU内核。

gitlab DevOps全生命周期管理

持续集成

持续集成是一种软件开发实践,即团队开发成员经常集成他们的工作,通常每个成员每天至少集成一次,也就意味着每天可能会发生多次集成。每次集成都通过自动化的构建(包括编译,发布,自动化测试)来验证,从而尽快地发现集成错误。许多团队发现这个过程可以大大减少集成的问题,让团队能够更快的开发内聚的软件。

  1. 快速发现错误。每完成一点更新,就集成到主干,可以快速发现错误,定位错误也比较容易。
  2. 防止分支大幅偏离主干。如果不是经常集成,主干又在不断更新,会导致以后集成的难度变大,甚至难以集成。

[Gitlab-CI]是GitLab Continuous Integration(Gitlab持续集成)的简称。
从Gitlab的8.0版本开始,gitlab就全面集成了Gitlab-CI,并且对所有项目默认开启。
只要在项目仓库的根目录添加.gitlab-ci.yml文件,并且配置了Runner(运行器),那么每一次合并请求(MR)或者push都会触发CI [pipeline]

"你不会对技术债务积累保持警惕,并且要求某人改变正在线上使用的东西更难。最后,Sid认为预提交和部署后的代码审查已经死了,代码应该通过分支机构投入生产之前对其进行审查。

Gitlab 可以做什么

  • Pre-commit和post-deploy已死,请用Git分支【彩世界彩票注册平台官网】。Gitlab 是 Git 服务端的集成管理平台,提供了:
  1. 代码托管服务
  2. Pre-commit和post-deploy已死,请用Git分支【彩世界彩票注册平台官网】。访问权限控制
  3. 问题跟踪,bug的记录、跟踪和讨论
  4. Wiki,项目中一些相关的说明和文档
  5. 代码审查,可以查看、评论代码
    1. 持续集成

Pre-commit预提交审核

彩世界彩票注册平台官网 26

"尽管那里可能存有技术债务,但是至少它不会影响其他代码,"Sid解释说。"你对技术债务有一定的兴趣,但是取决于你的技术债务对你代码库的影响有多大。代码没有太多变化,它正在被执行,至少它是不会影响其他代码。总是会有技术债务,而且你总是会在有限的时间内审查和解决问题。专注于当前活跃的代码,这是最需要关注的地方。"

git、github、gitlab的基于git分支流程之前虫虫的文章曾经专门介绍过,最后在此介绍下gitlab基于git分支的代码审核流程。gitlab的分支流程以master分支为基础,只有master接受的commit才可以合并得到其他分支

Gitlab基于Git分支的代码审核流程

彩世界彩票注册平台官网 27

gitlab问题看板

彩世界彩票注册平台官网 28

熟悉版本控制的人知道,在项目源代码控制流程中Pre-commit预提交和部署后代码审查(post-deploy)是用来做代码提交控制,提高代码质量的有效的方法。这些方法在Git大流行的今天还有意义么?前一段时间著名Git服务器厂商Gitlab公司CEO Sid Sijbrandij撰文发表了他的看法认为"Pre-commit和post-deploy已死,应使用更有效的Git分支,本文虫虫跟大家一起来解读下sid的观点。

Git分支更有效率

此外,偶尔性检查代码库也没有意义。

Sid说,可以使用Git分支来确保代码可以安全地引入代码库,与Pre-commit和post-deploy相比可以提高效率,而且Pre-commit很难跟踪。

gitlab MR列表

"如果需要改变代码,就会有额外的风险。如果你不做改变,那就是带来额外的技术债务。你需要时常在两者之间做出选择。"

本文由彩世界注册首页发布于彩世界彩票注册平台官网,转载请注明出处:Pre-commit和post-deploy已死,请用Git分支【彩世界彩

上一篇:聚划算升级供给侧 加速渗透下沉市场彩世界彩票 下一篇:AI 大数据驱动下,零售服务商玩家或在崛起彩世
猜你喜欢
热门排行
精彩图文