方寸山

使用GitLab管理源代码

使用GitLab管理源代码

基本概念

  1. GitLab 是什么?

    GitLab 是一个用于仓库管理系统的开源项目。使用Git作为代码管理工具,并在此基础上搭建起来的web服务。简而言之,它就是一个Git的「服务端」。

  2. 用户、组

    目前Android相关的开发资源是集中在android组下管理的。android组下所有的资源对组成员是可见的。一般情况,凡是android的公共开发项目都应该在android组下创建。而私人项目则不必也没有必要在android组下创建。这一点与之前是不同的。

  3. Protected branches

    受保护的分支,不允许开发者直接push的分支。这是GitLab支持的一种保护稳定分支的特性,开发者必须通过Merge Requests来提交代码。

  4. Merge Requests

    请求代码合并。在很多项目的开发过程中(如开源项目),会有较多的人参与,然而并不是每个人都有权限向主仓库中提交代码,这是因为需要保证代码的质量。当我们需要提交代码到主仓库中时,就可以通过Merge Requests发起代码合并请求。

项目创建

一般情况下,公共项目的创建应该由代码管理员创建和分配。
以下以android组为例来说明公共项目的创建过程。

  1. 项目为公共的,因此需要在android组下创建,默认情况下,组成员都具有查看项目的权限;
  2. 项目创建时,如果仅允许组内成员可见,则需要指定Visibility Levelprivate;如果项目允许登录的用户可见,则需要指定为Internal;一般情况下,不建议公共项目指定为public
  3. 项目创建后,代码管理员需要配置Protected branches,默认情况应该保护mater和develop分支。

项目开发

项目开发时与原有的Git使用过程基本相同,不同的是无法向受保护分支直接push代码。实际开发过程中,我们需要新建一个本地分支用于开发新的功能,为了下文叙述方便,该分支命名为feature

代码更新和提交

应该随时与远程仓库的代码保持更新。

代码更新

通过git pull --rebase [origin] [develop]更新远程代码。类似的,也可以通过git fetchgit mergegit rebase等命令进行操作。

代码提交

当我们完成某个功能、模块或某个bug的修复工作之后,需要将代码的改动同步给其他的项目参与者时,我们需要使用代码合并功能,即Merge Requests。关于Merge Requests的解释参考前文。下文为完整一次代码提交过程。

  1. 提交代码前先更新代码
  2. 本地代码提交到远程仓库

本地分支开发完成后,将代码push到远程仓库中对应的分支,如feature。注意,因为远程仓库中masterdevelop分支一般是受保护的,开发者无法直接push代码,我们需要先将本地的分支push到远程仓库中的非保护分支。一般情况下与本地分支保持一致即可。

  1. 在远程仓库发起Merge Requests

代码push到远程仓库之后,需要在GitLab的Web页面完成Merge Requests过程。

我们首先打开个人目录下的远程仓库页面,然后进入到Merge Requests页面。在Merge Requests页面中选择New Merge Request,打开的页面如下图所示:

其中:

  • 左侧Source branch

    android/HelloGitLab为你开发中对应的远程仓库,feature即为需要选择合并的分支。在整个Merge Requests过程中该仓库及对应分支就是贡献代码的一方,即:需要提交的代码部分。

  • 右侧Target branch

    android/HelloGitLab为主仓库,develop为需要接收代码的分支。仓库和分支都是需要选择的,在选择的时候需要认清主仓库和分支。该部分就是接收代码的一方。

  1. 提交Merge Requests

在该步骤中需要完善Merge Requests的标题和说明,默认情况下会把最近一次的commit信息填充上来。以下针对几个特殊的部分做详细说明:

  • Description

    该部分除了可以填写提交说明外,还可以在内容区@代码审核的参与者,可以为用户或者组。如@qiangzeng

  • Assignee

    代码审查的决策者,即:assignee指定的人拥有权利是否接受本次Merge Requests。而被@到的人则不具备这项权利。

  • Milestone

    里程碑,此处暂略。

  1. 处理Merge Requests

    被@的人及被assignee的人都会收到代码审查的邀请,这些人可以在Merge Requests页面查看Merge Requests的发起者所做的代码改动,并决定是否接受这次Merge Requests。

坚持原创技术分享,您的支持将鼓励我继续创作!