群组 / 项目

  群组和项目的关系我们可以简单的理解成文件夹和文件的关系。一个群组可以包含一个或多个项目。

  使用群组,可以将相关的项目组合在一起,并允许成员同时访问多个项目。

  群组也可以嵌套在子组中,建议最多嵌套一层。  

  项目的命名我们建议前缀组的名称。

  项目的所属关系可以转移

可见级别

  创建群组或者创建项目时,需要设置可见级别,默认为 Internal。有三种级别可选:

  1.private。只有项目成员访问才允许访问该项目。必须明确给每一个用户授权访问。

  2.Internal。任何已登录的用户均可以访问该项目。

  3.public。任何人都可以访问该项目,无论是否登录。

  对于安全类的项目,应该保证知道的人越少越好,Group 和 Project 的访问级别均应该设置为 Private。

  对于模板和纯技术类项目,应该设置为 public 或者 internal。

  还有一类项目,希望所有人知道它的存在,可以浏览,可以搜索,但是不希望所有人都能够获取它的代码。那我们可以这样来设置:

  项目的访问级别是 Internal。

  项目的(Settings(设置) -> General(常规) -> Permissions(权限) -> Repository(仓库)) 权限设置为: Only Project Members。

权限

  GitLab 的权限分为群组和项目权限。项目的默认权限继承群组的权限。GitLab有一下五种身份设置,不同的身份分别具有不同的操作权限

      1.所有者。

    2.主程序员。

    3.开发人员。

    4.报告者。

    5.访客。

  群组权限设置   

  项目权限设置   

  因为项目的权限设置是继承组的权限,如果组的权限不合理,可以进一步更改。

Git实践-分支管理

          

  主分支

  在版本控制系统中有两个永久存在的分支,即master分支和dev分支。

  我们认为远程的master分支上HEAD指向的代码都是可发布的。而远程dev分支上HEAD指向的代码总是反应了下一个版本所要添加功能的最新的代码变更。

  当dev分支上的代码达到一个稳定状态,准备发布时,所有代码的变更都应合并到master分支,然后打上发布版本号的tag。所以,每次代码合并到master分支时,它既是一个人为定义的新的发布产品。

  辅助分支

  为帮助团队成员间的并行开发,功能的简单跟踪,产品的发布准备事宜,以及快速的解决线上问题,我们会采用另外一种辅助性的分支,这些辅助性分支往往只有有限的生命周期,因为他们最终会被删除。辅助分支有几种不同的类型

  1.功能分支

  用于开发未来某个版本新的功能。只要功能还在开发,它就应该一直存在。功能分支可以从主要分支建立,也可以并行与主要分支建立,但是最终必须合并到主要分支中。功能分支可以随意命名,但是除了master,dev,release,hotfix外。

  功能分支只存在于开发者的本地版本库。

  2.release分支

  从dev分支去建立release分支,release分支必须合并到dev分支和master分支。

  release分支用于支持一个新版本的发布。在release分支创建好后,就会获取到一个决定好的即将发布的版本号。在此之前,dev分支的代码反应出了下一个版本的代码变更

  当release分支的准备成为一个真正的发布版本时,我们必须将release分支合并回master分支(因为master分支的每一次提交都是预先定义好的一个新版本),然后为这次提交打tag,为将来查看历史版本做准备。最后将在release分支做得更改也合并到dev分支,这样的作用是使将来的其他版本也会包含这些已经解决了的Bug。

  3.Hotfix分支

  Hotfix分支从master分支进行创建。最后必须合并回dev分支和master分支。

  Hotfix分支在某种程度上非常像release分支,他们都是为新版本发布做准备。Hotfix分支是基于当前生产环境的产品的一个Bug急需解决而创建的。当某个版本的产品有一个严重Bug需要立即解决,Hotfix分支需要从master分支上该版本对应的tag上进行建立,因为这个tag标记了产品的版本。

  完成工作之后,解决掉的bug代码需要合并回master分支,同时也需要合并到dev分支,目的是保证在下一版本中该Bug已经被解决。

  上述的每一个分支都有其特殊目的,也绑定了严格的规则:哪些分支是自己的拉取分支,哪些分支是自己的目标合并分支。从技术角度看,这些分支的特殊性没有更多的含义。只是按照我们的使用方式对这些分支进行了归类。他们依旧是原Git分支的样子。

commits / push

  工作中我们每天最少一次推送,而每次修改都可以作为一次提交。

合并请求

  合并请求是GitLab作为代码协作和版本控制平台的基础。顾名思义:一个请求,以合并一个分支到另一个分支。

   合并申请功能来通知团队成员你已经完成了可一个功能开发。当开发者完成开发的功能后,然后发起合并申请。这可以让被通知到人去review代码并合并这些代码到master分支不过合并申请功能可不止发送通知这么简单——它可以用来作为讨论提出申请的功能的专用论坛。如果代码有任何问题,团队成员们可以提出反馈,甚至推送(push)提交来小小的修改代码。合并申请功能可以追踪这些事情。

   请求合并的基本流程大致如下:

   开发者在本地仓库创建一个功能开发专用的分支。

   开发者将分支推送到远程仓库

   开发者发起合并申请

   团队成员review代码,展开讨论或者修改他们。

   项目维护者合并该分支到正式仓库然后关闭合并申请。

敏捷开发

  GitLab是敏捷开发的一个高效实践工具,而且在不断的发展和迭代。其作用主要体现在以下两个功能中

   issues 

     GitLab对issues的介绍是:issues是添加需要在项目中改进或解决的事物的地方。可能是要讨论的错误,任务或想法。issues是可搜索和可过滤的。

     issues可以是一个Bug,可以是一个功能,可以用开发布任务,需求调研或者是某个类或者函数的重构。

     强烈建议跟项目有关系的事情,不要放在脑子里,放在issues中。而我们每天上班的第一件事就是看issues,了解项目相关的问题。

   里程碑

     里程碑规定项目的任务清单,任务的开始时间和结束时间。可以多个里程碑并行。

     里程碑是项目整体进度的体现。项目经理通过关注里程碑的规划,进度对项目进行相应的调整。

除了以上操作,GitLab还有很多高深的操作,例如CI持续集成,镜像等,那就需要大家自己去探索啦。

参考文章:GitLub操作

     Gitlub文档

 

GitLab项目管理实践的更多相关文章

  1. 项目管理实践【六】自动同步数据库【Using Visual Studio with Source Control System to synchronize database automatically】

    在上一篇项目管理实践[五]自动编译和发布网站中,我们讲解了如何使用MSBuild+Robocopy+WebDeployment来自动编译和部署网站,今天,我们来看一下,如何使用MSBuild +SVN ...

  2. 项目管理实践【五】自动编译和发布网站【Using Visual Studio with Source Control System to build and publish website automatically】

    在上一篇教程项目管理实践[三]每日构建[Daily Build Using CruiseControl.NET and MSBuild] 中,我们讲解了如何使用CCNET+MSBuild来自动编译项目 ...

  3. 项目管理实践【四】Bug跟踪管理【Bug Trace and Management】

    首先,向大家说一声抱歉,这篇文章耽误了这么久才和大家见面.至于Bug的跟踪和管理的必要性和好处,我就不在这里说了,下面介绍几款Bug跟踪和管理的软件. 一.BugNET BugNET是一个非常优秀的开 ...

  4. 项目管理实践【三】每日构建【Daily Build Using CruiseControl.NET and MSBuild】

    在上一篇项目管理实践教程二.源代码控制[Source Control Using VisualSVN Server and TortoiseSVN]中我们已经讲解了如何使用TortoiseSVN和Vi ...

  5. 项目管理实践教程二、源代码控制【Source Control Using VisualSVN Server and TortoiseSVN】

    在第一篇文章 项目管理实践教程一.工欲善其事,必先利其器[Basic Tools]发布后,根据大家的回复,我需要向大家说明几个问题: 1.为什么要用VisualSVN Server,而不用Subver ...

  6. 项目管理实践教程一、工欲善其事,必先利其器【Basic Tools】

    今天,我们首先安装一些必须的软件,主要有下面的4个,其中软件1和2使用在服务器机上,软件3和4安装在客户端机上.另外,我们还有用到MSBuild.RoboCopy.WebDeployment等等,在下 ...

  7. SE_Work1_阅读构建之法&项目管理实践

    项目 内容 课程:北航-2020-春-软件工程 博客园班级博客 要求:阅读<构建之法>并回答问题 个人博客作业 我在这个课程的目标是 提升团队管理及合作能力,开发一项满意的工程项目 这个作 ...

  8. 项目管理实践 -- 健身小管家(Fitness housekeeper)的管理

      最近在网上看到一篇文章<王石:我每天都强迫自己做的一件事>,[http://blog.sina.com.cn/s/blog_4dfc1c330102v0d0.html] 原始链接不详. ...

  9. GitLab+Rancher实践DevOps【转载】

    摘要 本文描述使用自建GitLab和Rancher实践持续集成/持续交付流水线的过程,并用Rancher实现容器编排和蓝绿发布. GitLab持续集成 GitLab持续集成/持续交付流程图:部署Git ...

随机推荐

  1. 学习前端D1

    第一次写博客,有些小激动,以前写学习的记录都是在有道云笔记上写的,在博客园上更多的是膜拜大佬.偷师学艺.前段时间,我和朋友闲聊时,知道用博客每天写知识会提高学习的热情,这感情好呀,于是乎,今天,我依旧 ...

  2. Oracle 行列转换公式

    1.行转列 SELECT STU_NAME,TERM,ZHANBI,COURSE_MARK FROM (SELECT '罗飞' STU_NAME, '2001-2002' TERM, ' 微积分, ' ...

  3. 【DSP开发】【并行计算-CUDA开发】TI OpenCL v01.01.xx

    TI OpenCL v01.01.xx TI OpenCL™ Runtime Documentation Contents: Introduction OpenCL 1.1 Reference Mat ...

  4. 【Spring 基础】通过注解注入Bean

    原课程:通过注解注入Bean 注入bean知识点思维导图 Spring 4.x推荐使用基于构造器的方式进行bean注入7.4.1 Dependency Injection spring为什么推荐使用构 ...

  5. RS232与RS485的功能与区别!

    转载于:http://blog.csdn.net/kevinhg/article/details/7367144 RS232接口是1970年由美国电子工业协会(EIA)联合贝尔系统.调制解调器厂家及计 ...

  6. Vue 中 $attrs 的使用

    名词解释: $attrs--继承所有的父组件属性(除了prop传递的属性.class 和 style ) inheritAttrs:默认值true,继承所有的父组件属性(除props的特定绑定)作为普 ...

  7. PHP空对象 空数组

    PHP定义空对象:$obj = (object)null;或$obj = (object)array(); 定义空数组:$arr = array();或$arr = [];//自 5.4 起可以使用短 ...

  8. Python 入门 之 初识面向对象

    Python 入门 之 初识面向对象 1.初识面向对象编程 (核心--对象) (1)观察以下代码: # 面向过程编程 s = "alexdsb" count = 0 for i i ...

  9. python基础数据类型之一

    python属于解释型(有良好的平台兼容性,在任何环境中都可以运行,修改代码的时候直接修改就可以,可以快速部署,不用停机维护).动态的(python在编程之前不需要提前设定好各种变量,C语言之类的需要 ...

  10. [Next] 四.在next中引入redux

    添加 redux 写过 react 稍微复杂一些应用的话,应该都对 redux(mobx)有一定的了解.这次将 redux 引入到项目中 因为之前写项目的习惯,更喜欢使用 redux-thunk 改写 ...