之前总结过一篇三分钟时时彩关于 git入门的文章,这几天心血来潮,结合三分钟时时彩我 在手机微博开发团队中实际经验谈一谈git在工作中的应用吧。


集中式和分布式

git与之前的svn相比,主要体现在集中式和分布式的区别。集中式主要依托于中央三分钟时时彩服务 器,开发人员从中央三分钟时时彩服务 器获得最新的代码,开发完成后再提交到中央三分钟时时彩服务 器,脱离了中央三分钟时时彩服务 器,基本上三分钟时时彩服务 就不行了。而分布式版本管理系统在三分钟时时彩本地 都有一个仓库,可以不依赖中央三分钟时时彩服务 器进行开发提交代码,在需要往远端合并的时候才进行。

image.png


git工作区和缓存区

git在三分钟时时彩本地 工作的工作状态如下所示,对于新添加/更新的文件只有通过git add添加到缓存区,然后通过git commit才能提交到仓库中。

image.png


可能涉及到的操作。

  • 创建版本库

    git init(这个用到的很少)

  • 添加文件并且提交

    git add & git commit

  • 查看提交日志

    git log


gitlab远程仓库

因为内部商业代码,所以三分钟时时彩三分钟时时彩我 们 没有托管到github,这里使用和gitlhub相似的gitlab作为远程仓库,三分钟时时彩三分钟时时彩我 们 使用的社区版,虽然比商业版少了些功能,但基本上是够用的。三分钟时时彩关于 三分钟时时彩软件 的安装三分钟时时彩三分钟时时彩我 们 这里就不做介绍了,周期性的会随着gitlab的发布而更新。

image.png

git工作流

网上介绍工作流的文章也很多,大致分成下面三种:

  • Git flow

  • Github flow

  • Gitlab flow

感觉根据项目的实际情况都略有差别。三分钟时时彩三分钟时时彩我 们 的工作流采取如下方式:

image.png

开发步骤说明:

1. project fork

三分钟时时彩三分钟时时彩我 们 的项目一般都隶属于项目组,日常开发先把主仓库fork到自己的空间下。

2. git clone

通过git clone把自己远程仓库上的项目代码clone到自己三分钟时时彩本地 目录。

3. git branch & git checkout 

创建分支并且切换到分支上面,三分钟时时彩三分钟时时彩我 们 的所有的功能都是基于分支进行开发的,每次有新的功能或者对代码进行改进的时候,三分钟时时彩三分钟时时彩我 们 都会创建一个新的分支进行开发。

4. git add & git commit

有更新或者添加的代码,三分钟时时彩三分钟时时彩我 们 执行git add和git commit 提交到自己三分钟时时彩本地 仓库。

5. git pull 

即上图中的步骤5,同步代码,开发功能的时候创建分支开始时,线上的代码也是往前走的,功能开发完,代码可能落后于master的代码,这时就需要进行同步到最新的代码,检查三分钟时时彩你 的功能代码是否有代码冲突。

6. git push

这一步是把代码推送到远端仓库上。

7. create merge request

当接到三分钟时时彩产品 或者业务测试的邮件,确定可以上线的时候,创建个merge request,这时代码就可以进入到待合并状态,如果是常规上线,之后由专人进行合并,QA回归测试,然后上线。


git remote

上面的工作流中涉及到远程仓库的信息,如:git pull,三分钟时时彩你 的代码是通过三分钟时时彩你 的远程仓库拷贝的,为什么可以从远程项目组仓库进行代码同步呢,在这里说下git remote相关的内容。

三分钟时时彩三分钟时时彩我 们 执行git remote -v 会看到一条通道信息,这个是三分钟时时彩你 三分钟时时彩本地 仓库到远程仓库的通道,origin是它的名字。

image.png

然后三分钟时时彩三分钟时时彩我 们 通过git remote add [remote_name] [remote_url] 即可添加一条通道,如上面的upstream(也可以起其他的名字)。这时三分钟时时彩你 三分钟时时彩本地 的仓库就对应两条通道了。

image.png


其中upstream是不可以直接push代码的,仅用于同步代码。

git pull upstream master即从远程master上同步最新的代码。


上线

三分钟时时彩三分钟时时彩我 们 之前采用的如下图方式进行上线。

image.png

常规上线流程

  1. 一条基准线master,master上面的代码都是上线最新的代码,所有人都通过master更新同步代码。

  2. 在某个时间点,比如今天的11点吧(个人三分钟时时彩推荐 11:00左右上线,即上午上线),如果测试没有问题,此时基于master创建个上线的tag,三分钟时时彩三分钟时时彩我 们 命名为release.0722.0,然后把它推上线。

  3. 稳定之后,三分钟时时彩三分钟时时彩我 们 进行下一个版本的准备,此时基于master创建一个分支branch,比如:online.0723.0。

  4. 然后将准备在0723.0上线的merge request都合并到这个分支上面。然后创建QA回归测试tag 如candidate.0722.0,然后把这个测试tag推到仿真机器上测试。

  5. 当QA测试没有问题后,会给开发测试邮件,此时三分钟时时彩三分钟时时彩我 们 会把上述online.0723.0的代码合并到master上,然后基于master打出一个最新的常规上线包如release.0723.0上线,此时也确保master上面是最新的代码。

  6. 如此反复,进入下一阶段的常规上线循环。


紧急上线流程

对于紧急上线流程的情况,三分钟时时彩三分钟时时彩我 们 这里还是十分常见的,比如紧急修复bug,紧急功能上线等情况。

紧急上线必然有紧急的流程应对,首先,这个需求必须领导知道的。然后业务方测试没有问题,在确认没有问题的情况下,这部分代码是直接合并到master上,如图中步骤6,然后基于最新的master代码创建tag,如release.0723.1,然后上线。这个地方其实可以加上一个emergency标识,告诉大家这个上线是个紧急上线。


好了,三分钟时时彩关于 git和gitlab的基本功能就到这里了,下一篇文章三分钟时时彩三分钟时时彩我 们 介绍下git hooks和gitlab hooks以及gitlabCI等扩展功能。