gitlab多人协同工作

本文为亨利向《Git权威指南》的作者蒋鑫老师的答疑邮件写成。 
这里特别感谢蒋鑫老师对我询问gitlab的协同工作流程问题的详细解答。 
蒋鑫老师的细致专业的解答让我非常感动。 

gitlab----新颖的git服务器托管网站,开源免费。你可以在自己的公司或者开发团队搭建好一个。 
gitlab的工作流程是 
gitlab help中建议的工作流程是这样。如下图。 

(1).开发成员拷贝管理员建立好的项目到自己本地。

(2).创建自己的分支。

(3).在自己的分支上写代码,并提交。

(4).推送到远程服务器,分支是自己的分支。 
(分支的命名规则使用小驼峰式命名法。比如我是员工孙悟空,我就推送到孙悟空分支。分支的命名规则为开发人员姓名+所开发的功能。命名中不要使用特殊字符,不要使用点。 
例如孙悟空开发的分支,命名为swkFeature1)

(5).在Commit页面上浏览分支。

(6).创建一个合并请求。

(7).团队的管理员或者领导者审查并且决定是否合并员工提交的分支到主分支上。

管理员在建好的项目中加入开发人员。

开发人员有相应的权限级别,分为Guest,Reporter,Developer,Master,等这几个角色,这几个角色的权限从低到高排列。

Developer能够推送和删除没有保护的分支,Master可以对没有保护和有保护的分支进行操作。如图1所示。

如下图 

 

我们使用下面这个图示中的分支模型进行工作。

Git 的开发者都喜欢以这种方式来开展工作,在master 分支中保留完全稳定的代码,即已经发布或即将发布的代码。 
与此同时,他们还有一个名为develop 专门用于后续的开发,或仅用于稳定性测试。当然并不是说一定要绝对稳定,不过一旦进入某种稳定状态, 
便可以把它合并到master 里。还有在工作中,把开发任务分解为各个功能或者模块, 
用topic(topic branch主题分支,有又成为feature branch特性分支),实现之后并测试稳定之后,可以合并到其他分支。 
 

Git 的开发者都喜欢以这种方式来开展工作,在master 分支中保留完全稳定的代码,即已经发布或即将发布的代码。 
与此同时,他们还有一个名为develop分支 专门用于后续的开发,或仅用于稳定性测试。当然并不是说一定要绝对稳定, 
不过一旦进入某种稳定状态,便可以把它合并到master 里。 
还有在工作中,把开发任务分解为各个功能或者模块,用topic分支(topic branch主题分支,有又称为feature branch特性分支), 
比如实现功能1,在develop分支的基础上产生分支feature1,实现功能2,有分支feature2。 
feature1和feature2实现了要求的功能之后,合并到develop分支上去。develop分支测试稳定之后,可以合并到master分支上去。 

情景(以下的模拟场景没有把develop分支考虑进去,直接在master分支上分解功能分支。)

1.管理员唐僧建好了一个项目,把孙悟空加入,并授予Developer角色权限,唐僧本身就是比孙悟空高一级的Master角色。唐僧在自己的电脑上设定好了master分支为受保护分支。 

2.员工孙悟空在自己电脑上工作,并推送已经写好的代码到远程服务器的孙悟空分支上,即swkFeature1上 

孙悟空做了如下操作

git clone git@mygitlabold.sytes.net:root/testc01.git  //从管理员唐僧那里克隆项目

cd testc01 //进入项目工作

git checkout -b swkFeature1 //创建自己的分支,并切换到此分支上,分支的命名规则为开发人员名字+所开发的功能名字。本例中命名为swkfeature1

vim aa.html //写了一个名为aa的html文件 

git add aa.html //加入跟踪

ggit commit -am "swkFeature1 is ready" //提交

git push origin swkFeature1 //推送到远程服务器孙悟空分支上,git提示推送成功

git push origin swkFeature1:master //孙悟空想尝试直接推送到受保护的分支上,孙悟空是没有这个权限的,git会提示为推送失败 

图为孙悟空键入的命令 

 

孙悟空在Commit页面上浏览分支swkFeature1,然后向项目领导唐僧创建一个合并请求。 


3.这个合并请求除了唐僧可以登录gitlab上看到之外,还可以通过邮件方式看到。唐僧即使没有登录gitlab,只要他的邮箱支持手机邮箱等方式, 
手机邮箱可以通过短信的方式通知唐僧,唐僧可以实时看到合并要求。

 

管理员唐僧对要求合并的分支代码进行审核。 
管理员唐僧从服务器上获取孙悟空提交的分支。 
git fetch

然后孙悟空推送的远程新分支被管理员唐僧拉拽到本地,但是不是以本地分支存在, 
而是保存在 .git/refs/heads 之外(.git/refs/remotes/origin/之中)的远程分支。 
管理员唐僧可以如下方法对孙悟空的分支进行审核。 
执行 
git log master..origin/swkFeature1 //可以看到孙悟空推送了几个提交。

管理员唐僧可以合并孙悟空的分支: 
git merge origin/swkFeature1 
管理员唐僧可以逐一对孙悟空的提交审核。如果发现有问题,管理员唐僧可以本地回滚。 
git reset --hard HEAD^ # 或 master@{1} 
几个反复后,当孙悟空的分支审核无误,管理员唐僧将合并后的本地 master 分支推送到远程服务器: 
git push # 缺省 remote 为 origin

图 唐僧在自己的电脑上工作,审核孙悟空提交的分支代码,决定是否合并。 


图 唐僧键入的命令 

 

这个时候,唐僧打开gitlab相应的项目,查看master分支的内容。发现服务器上面有了孙悟空提交的源代码了。 


唐僧可以在那个请求页面下关闭合并请求。gitlab合并请求有自动的功能,但是还是需要管理员唐僧获取下来,合并,测试是否有问题。不建议使用gitlab的自动合并功能。 



合并请求就被关闭了。 



4.孙悟空那边。 
孙悟空看到请求已经接受。

执行 git fetch 会获取到更新的 master 分支。然后 

git checkout master 
git merge --ff origin/master 
swkFeature1分支完成使命,删掉吧: git branch -d swkFeature1 

图孙悟空后来键入的命令,图中因为没有切换到master分支上,所以又重新执行了一遍上述命令。 

gitlab多人协作开发的更多相关文章

  1. Unity3D多人协作开发环境搭建

    多人协作 说到多人协作开发,大家都会想到要使用版本控制工具来管理项目,当然最常用的要数SVN和Git了,但是SVN管理Unity3D项目的确有一些不尽人意的地方. 比如:两个人修改了同一个场景,SVN ...

  2. Git详细教程---多人协作开发

    Git可以完成两件事情: 1. 版本控制 2.多人协作开发 如今的项目,规模越来越大,功能越来越多,需要有一个团队进行开发. 如果有多个开发人员共同开发一个项目,如何进行协作的呢. Git提供了一个非 ...

  3. Git详细教程(2)---多人协作开发

    Git可以完成两件事情: 1. 版本控制 2.多人协作开发 如今的项目,规模越来越大,功能越来越多,需要有一个团队进行开发. 如果有多个开发人员共同开发一个项目,如何进行协作的呢. Git提供了一个非 ...

  4. 利用git 进行多人协作开发

    现在,大部分项目都是用 git 来管理代码的,但当项目变大.多人协作时,git 的使用就变得复杂了,这时就需要在 git 使用的流程上来思考如何更优的使用 git. 对于大部分 web 项目而言,并不 ...

  5. Git 多人协作开发的过程

    Git可以完成两件事情: 1. 版本控制 2.多人协作开发 如今的项目,规模越来越大,功能越来越多,需要有一个团队进行开发. 如果有多个开发人员共同开发一个项目,如何进行协作的呢. Git提供了一个非 ...

  6. Git教程Git多人协作开发

    Git可以完成两件事情: 1. 版本控制 2.多人协作开发 如今的项目,规模越来越大,功能越来越多,需要有一个团队进行开发. 如果有多个开发人员共同开发一个项目,如何进行协作的呢. Git提供了一个非 ...

  7. GitHub 多人协作开发 三种方式:

    GitHub 多人协作开发 三种方式: 一.Fork 方式 网上介绍比较多的方式(比较大型的开源项目,比如cocos2d-x) 开发者 fork 自己生成一个独立的分支,跟主分支完全独立,pull代码 ...

  8. Unity3D 多人协作开发 环境搭建 笔记(场景合并)

    http://www.cnblogs.com/zhaoqingqing/p/3371120.html 说到多人协作开发,大家都会想到要使用版本控制工具来管理项目,当然最常用的要数SVN和Git了,但是 ...

  9. Git_学习_04_ 多人协作开发的过程

    多人协作的工作模式通常是这样: 1.首先,可以试图用 git push origin branch-name 推送自己的修改: 2.如果推送失败,则因为远程分支比你的本地更新,需要先用 git pul ...

随机推荐

  1. 2016.10.14,英语,《American Accent Training》

    这本书是讲述美语发音训练的.已经看了一段时间了,决定向周叶学习,记录读书笔记.计划每天花半个小时,学习3节左右的音频(按照CD TRACK),并完成训练. CD1 Track1 What is Acc ...

  2. Struts2 OGNL 字符串自定义转化对象细节

    要使用Struts2的自定义对象转化,需要几个要点: 1.要有继承DefaultTypeConverter的实现类,要重写convertValue,并且参数value转化而来的String是Strin ...

  3. 阿里云服务器Linux CentOS安装配置(一)购买阿里云服务器

    阿里云服务器Linux CentOS安装配置(一)购买阿里云服务器 我在阿里云购买的服务器配置 CPU:1核 内存:2G 系统盘:40G 公共镜像:CentOS 6.5 64位 公网带宽:1Mbps ...

  4. ios程序发布测试打包

    1. 获取测试机UDID 手机连接电脑,打开iTunes-摘要-点击序列号,设备概要界面显示设备udid-反键-拷贝 2. 添加设备 取得UDID后,进入开发者中心-iOS PRovisioning ...

  5. Eexcel批量设定单元格条件格式

    最近在整理excel项目记录,觉得有些技巧还是值得拥有,记录备份下,以防将来使用: [工具/原料] excel(office或wps) [方法/步骤] 1.建立一个追踪表如下: 2.选择状态列,建立数 ...

  6. centos7 firewalld

    1.firewalld简介 firewalld是centos7的一大特性,最大的好处有两个: 1.支持动态更新,不用重启服务: 2.加入了防火墙的"zone"概念   firewa ...

  7. sqlalchemy mark-deleted 和 python 多继承下的方法解析顺序 MRO

    sqlalchemy mark-deleted 和 python 多继承下的方法解析顺序 MRO 今天在弄一个 sqlalchemy 的数据库基类的时候,遇到了跟多继承相关的一个小问题,因此顺便看了一 ...

  8. DataTables样式

    Styling 官方链接 AdminLTE HTML代码 <div class="row"> <div class="col-xs-12"&g ...

  9. jQuery工具方法

    目录 常用工具方法 判断数据类型的方法 Ajax操作 $.ajax 简便写法 Ajax事件 返回值 JSONP 文件上传 参考链接 jQuery函数库提供了一个jQuery对象(简写为$),这个对象本 ...

  10. C语言第五次作业

    #include<stdio.h> int main() { int a,b,c; printf("请输入3个整数:"); scanf("%d %d %d&q ...