首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

创顺科技技术分享会第6期:项目上线分支管理

3月14日晚19点,创顺科技2018年第6期员工分享会顺利召开。本期分享会由配置管理员-朱明杰负责主讲,与全体技术人员分享了项目上线分支管理技术!

项目上线的时候,需要进行一系列有关分支的处理工作。为了明确相关具体的分支处理做法,提升开发效率以及降低上线风险,需明确分支处理规则。

一、分支说明

目前为止,分支分为以下几个类型:

master:主分支,作为所有分支的基础分支。(固定)

develop:运维分支,所有开发分支在发布运维环境的时候,都需要合并到此分支。(固定)

test:测试分支,所有开发分支在发布测试环境的时候,都需要合并到此分支。(固定)

feature:开发分支,包括新增需求分支和线上缺陷修复分支,从master分支上创建。

release:发布分支,发布线上的分支,从develop分支上创建。

svn:SVN交互分支,用于将之前SVN上的代码提交到GIT上而设。(固定)

tag:作为其它分支的一个标记,用于以后对已经删除分支的恢复而设。

分支模式图

二、项目上线流程

在上线的过程中,各个阶段分支的转换流程如下:

上线分支流程图

三、命名规范

分支的命名,不同的分支有不同的格式要求。

主分支:使用固定名称master。

开发分支:开发分支分为新增需求和缺陷修复两种类型的分支。命名格式为:【分支类型】-【项目代号】-【case号】。举例:feature-trj-2118,代表投融家项目case号为2118的新增需求开发分支;bugfix-trj-2119,为投融家项目case号为2119的缺陷修复分支。

测试分支:使用固定名称test。

运维分支:使用固定名称develop。

发布分支:命名格式为:【release】-【项目代号】-【平台类型】-【日期】_【序号】。举例:release-trj-php-20180307_2,代表投融家的php平台的日期为2018年3月7日的第2个发布分支。如果序号为1,则可以不写;如release-trj-php-20180307,代表投融家的php平台的日期为2018年3月7日的第1个发布分支。

tag:命名格式为:tag包含开发分支和发布分支两种类型。命名格式为:

1)开发分支的tag:【分支类型代号】.【case号】。举例:F.2118,代表case号为2118的新增需求分支的tag; B.2119,代表case号为2119的缺陷修复分支的tag。

2)发布分支的tag:R.【日期】_【序号】。举例:R.20180307_2,代表20180307的第2个tag。

注意:tag的日期和序号必须保证与对应的发布分支的日期和序号相同。

四、分支的生命周期

分支从创建到销毁,为尽量减少版本库中所存在的分支数量,提升开发和查询的效率,不同的分支有其不同的生命周期。

分支的生命周期

五、冲突的处理

冲突出现在分支合并或者从线上更新代码这两个过程中。对于冲突的处理,最好使用一些工具进行,这样有助于快速准确的处理。在Windows系统下可以使用tortoise GIT和SourceTree,在Mac下可以使用SourceTree,在Linux系统下可以使用smartgit (具体没用过)进行操作。

场景一:在合并分支或者更新线上代码到本地的时候出现冲突。

Sourcetree下的冲突处理:

1、点击左下角的“文件状态”一栏,进入文件目录,“未暂存文件”框下面的就是出现冲突的文件。对着一个文件,右键“解决冲突”,选择“打开外部合并工具”,就可以打开之前关联的工具Beyond Compare(没有关联需要先关联)。

2、在打开Beyond Compare 后,出现下图页面框:

在页面中有4个小框,代表不同的含义,随机可以查看本地文件夹中多出了BACKUP、BASE、LOCAL、REMOTE四个文件。其中BACKUP、BASE和LOCAL窗口不能编辑。具体含义如下:

BASE窗口:需要合并的两个文件的最近的共同祖先版本

LOCAL窗口:当前分支文件

REMOTE窗口:远程分支文件

OUTPUT窗口:合并之后的文件

3、所有的处理操作都在OUTPUT页面进行,在左侧有小箭头可以选择使用LOCAL还是REMOTE的代码,按“F2”可以对页面进行编辑,完成处理后,点击页面右上角的保存图标,关闭页面即可。

4、之后,在文件目录中之前的四个文件已经消失,但是会出现一个.orig的文件,该文件保留了冲突的原貌,需要手动删除,不要提交到版本库。此时,冲突已经处理完成,只需要提交即可。

TortoiseGIT下的冲突处理:

1、选择项目目录右键“git commit”,之后会出现提交的窗口,红色部分即为冲突部分。

2、选择红色的文件,左键双击打开处理页面。出现的页面中包含三个窗口,分别是Remote分支窗口,本地分支窗口以及处理结果窗口。其中Remote分支和本地分支窗口不能编辑,右键可以选择使用其中一个分支代码;处理结果窗口可以直接进行编辑。

3、页面中的字段有4中颜色,代表不同的含义:黄色代表新增,橙色代表删除,红色代表冲突,白色代表没有变化。处理完成后点击最上面的“Mark as resolved”按钮即可。

六、分支的回滚

在分支上误提交了一些版本想要删除的时候,可以使用分支的回滚功能。

revert:回退该次提交,并创建一个新的提交,回退不会破坏之前的版本历史。

应用场景:适用于回退之前某个特定的版本,并且不想破坏整个版本历史的时候使用。

基本命令:git revert 【版本号前6位】

场景一:误提交了一次代码,一段多余代码没有删除

1、查看版本库历史

2、回滚指定的版本

3、完成后,本地该版本的代码就回滚了,在本地版本库中就出现了回滚的日志,将代码提交到远程仓库即可。

reset:回退提交到特定的版本,会破坏特定版本之后的版本历史。

应用场景:适用于回退到之前特定的版本,并且不需要之后的所有版本的情况。

基本命令:git reset --【参数】 【版本号前6位】

参数包括三种:

--soft – 缓存区和工作目录都不会被改变

--mixed – 默认选项。缓存区和你指定的提交同步,但工作目录不受影响

--hard – 缓存区和工作目录都同步到你指定的提交

场景一:自己的分支不小心合并进了别人分支的代码

查看日志,找出最初的别人分支的代码版本。

通过使用git reset --hard 【版本号】 回滚到该最初版本的前一个版本上。如下图,查看日志可以发现分支已经回滚到最初版本的前一个版本,已经将别人分支的代码删除。

接着需要更新远程分支,首先切换到其它分支通过git push origin -d 【分支名】来删除旧的远程分支;然后再切换回此分支,通过git push origin 【分支名】来创建新的远程分支。这样新的分支就创建成功。

场景二:自己每次修改一点就推送到远程版本库,导致提交碎片过多

通过git reset --soft 【版本号】 回滚到该注释最早的一次。查看状态,可以发现暂存区中有些更新还没有提交,但是本地工作区中的文件没有改变。

然后重新提交代码,查看日志即可发现只有一条记录了。接着删除远程旧分支,将新的分支推送到远程即可。

场景三:根据某个特定的版本创建新的分支

在合并代码后,发布环境的时候发现出现了错误,原因可能是合并代码有问题导致的,如何才能重现问题呢?可以通过回滚这条分支到合并之前的版本然后创建新的分支,再次进行合并来重现问题。

通过hard reset 回滚到合并之前的版本,然后在从此版本创建新的分支。

七、Tag的处理

已经不需要使用的分支,在完成开发后可以通过创建一个tag来进行保存,之后就可以将该分支销毁,以减少服务器的分支数量,提升开发的效率。

基本命令:git tag 【tag的名称】

场景一:根据分支创建tag,并删除该分支

切换到该分支,使用命令git tag F.4000创建tag,并将tag推送到远程。

删除该本地分支和远程分支。

场景二:根据tag恢复已经删除的开发分支

在需要之前已经删除的分支时,可以通过tag进行恢复。使用命令git branch

八、分支更新的处理

在更新分支的时候,出现大量的冲突时,可能是线上分支的变动导致与本地分支版本历史不一致的缘故,如果本地的修改不需要使用的话,可以删除本地分支,重新从线上拉取分支。

在切换分支的时候提示:

可以使用git checkout 【文件绝对路径】 将文件的修改从暂存区退回:

在拉取代码时出现如下图错误,需要先更新本地版本再推送到远程:

在将代码推送到远程分支的时候出现如下错误,需要设置本地分支与远程分支的关联:

九、Git的权限配置

Git提供了一个叫做git config的工具,专门用来配置或读取相对应的工作环境变量。

三种配置方式:

1、/etc/gitconfig 文件:系统中对所有用户都普遍适用的配置。若使用 git config 时用 --system 选项,读写的就是这个文件。

2、~/.gitconfig 文件:用户目录下的配置文件只适用于该用户。若使用 git config 时用 --global 选项,读写的就是这个文件。

3、当前项目的 Git 目录中的配置文件(也就是工作目录中的 .git/config 文件):这里的配置仅仅针对当前项目有效。每一个级别的配置都会覆盖上层的相同配置,所以 .git/config 里的配置会覆盖 /etc/gitconfig 中的同名变量。

一般情况下,我们使用第二种全局配置即可,一个账号的配置可以使用所有有权限的项目。

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180315A14DZP00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券