1、锁机制 Locking Options

  严格锁(strict locking):一个时刻,只有一个人可以占用资源。

  乐观锁(optimistic locking):允许多个人同时修改同一文件。乐观锁基于一个假定:大多数时候,这种并发修改不会引起冲突。

2、Git可以定制一些钩子,这些钩子可以在特定的情况下被执行,分为Client端的钩子和Server端的钩子。Client端钩子被operation触发,比如commit,merge等,Server端钩子被网络动作触发,比如pushed commits。

那么钩子是放在哪的呢?

在.git/hooks/文件夹下。当你init一个仓库的时候,下边会有一些钩子的例子,以.sample结尾,都是些sh文件

3、在某个分支下使用命令gitk,可以看到这个分支的提交信息

使用git gui命令可以看到git的图形化用户界面

除了 Git 命令,权限控制也是 Git 中极为重要的组成部分,本文主要介绍 GitLab 系统提供的最常用的权限控制功能。

分配成员角色

首先来了解下,Git 中的五种角色:

角色 描述
Owner Git 系统管理员
Master Git 项目管理员
Developer Git 项目开发人员
Reporter Git 项目测试人员
Guest 访客

每一种角色所拥有的权限都不同,如下图:

我们需要做的是,为项目成员分配恰当的角色,以限制其权限。

锁定受保护分支

在对 Git 不熟悉的时候,时常苦恼于各个分支不受约束,任何开发人员都可以向任何分支直接推送任何提交,各种未经审查的代码、花样百出的 Bug 就这样流窜在预发布分支上。

其实我们可以通过 GitLab 的 受保护分支(Protected Branches) 功能解决该问题,该功能可用于:

  • 阻止 Master 角色以外的开发人员直接向此类分支推送代码,保持稳定分支的安全性;
  • 在向受保护分支合并代码前,强制进行代码审查。

接下来我们就使用这项功能,锁定我们的受保护分支——主分支 master 和预发布分支 release-* ,以阻止 Developer 直接向这两类分支中推送代码:

锁定后,Developer 推送代码将会报错:

$ git push origin master
Counting objects: 4, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 283 bytes | 0 bytes/s, done.
Total 3 (delta 1), reused 1 (delta 0)
remote: GitLab: You are not allowed to access master!
remote: error: hook declined to update refs/heads/master
To git@website:project.git
! [remote rejected] master -> master (hook declined)
error: failed to push some refs to 'git@website:project.git'

发起合并请求

锁定受保护分支后,要么 Master 需要时刻、主动关注各特性分支的进度,要么 Developer 需要线下、口头向 Master 汇报其特性分支的进度,这两种做法都非常不便于 Master 管理每个预发布分支的合并,尤其在团队大、分支多的情况。

我们可以通过 GitLab 的 发起合并请求(Merge Request) 功能解决该问题,这样既可以让 Developer 更自如的掌控自己分支进度,在必要的时候才主动发起合并请求;又可以减轻 Master 的合并工作量和沟通成本,可谓一举两得。

新建合并请求

第一步,按表单要求填写合并请求。注意,对于 Developer 而言:

  • From 是你的特性分支 feature-* ;
  • To 只可能是预发布分支 release-* ;
  • Title 和 Description 要填写恰当的分支描述;
  • Assign to 是该项目的 Master。

审查合并请求

第二步,Master 收到合并请求后,进行代码审查。逐一查看 Commits 一栏提交的内容即可,对于需要改进的代码,可以直接在该行添加注释,非常方便。

如果对整个请求还有疑问的地方,还可以通过底部的 Discussion 功能进行线上讨论。

处理合并请求

第三步,针对审查结果进行相应处理:

关闭

对于完全不合格的垃圾代码、或者废弃的特性分支的合并请求,Master 点击右上角的 Close按钮即可。合并请求将被关闭,相当于扔进回收站。

改进

对于分支内需改进的代码,Developer 直接修正并推送即可,合并请求将会自动包含最新的推送提交。

接受

Master 审查无误后,可以接受该次合并请求。点击 Accept Merge Request 按钮将自动合并分支,勾选 Remove source-branch 将同时删除该特性分支。

整个自动合并过程如果以命令形式手工执行的话,步骤如下:

#Step 1. Update the repo and checkout the branch we are going to merge
git fetch origin
git checkout -b test origin/feature-test #Step 2. Merge the branch and push the changes to GitLab
git checkout release-2016.4.7
git merge --no-ff feature-test
git push origin release-2016.4.7

以非快进式合并完成后,祖先图谱(graph)的展现结果如下:

*   be512fa (HEAD, origin/release-2016.4.7, release-2016.4.7)  Merge branch 'test' into 'release-2016.4.7'
|\
| * 1f52adf 测试
|/
* a4febbb (tag: 1.0.0, origin/master) 格式化货币保留两位小数

最后需要注意的是,只有 Assignee 才能够接受合并请求,其它人只会被通知:

You don’t have permission to merge this MR

总结

GitLab 提供的上述功能非常实用,为项目的源码管理提供了有力的支持。

http://blog.csdn.net/hongchangfirst/article/details/46693237

git锁和钩子以及图形化界面的更多相关文章

  1. Git应用详解第五讲:远程仓库Github与Git图形化界面

    前言 前情提要:Git应用详解第四讲:版本回退的三种方式与stash 这一节将会介绍本地仓库与远程仓库的一些简单互动以及几款常用的Git图形化界面,让你更加方便地使用git. 一.Git裸库 简单来说 ...

  2. Git各大平台(win/Linux/Mac)图形化界面客户端大汇总

    摘要: 介绍各平台下的图形化界面git客户端(本人并没有全部使用过),欢迎大家补充新的软件或者使用感受~  一.TortoiseGit - The coolest Interface to Git V ...

  3. Git图形化界面客户端

    Git图形化界面客户端大汇总 文,还在不断更新,网上搜到的同名文章都是未经同意就从这里复制过去的) 一.TortoiseGit - The coolest Interface to Git Versi ...

  4. git 学习小记之图形化界面客户端

    习惯了 Windows 的用户,一直不喜欢用类似命令行的东西来操作,当然我也不是不喜欢,只是操作太慢了.也许 Linux 大神在命令行的帮助下,办事效率翻倍,那也是非常常见的事情..当然我不是大神,所 ...

  5. git命令行or图形化界面?看这篇操作就够了

    我们在自己的私人分支开发好各自的模块后,就要合并到master,这个时候在idea里边先切换到master,然后update一下获取最新更新,解决一下冲突,最后再合并自己的私人分支,add,commi ...

  6. adminMongo:mongoDB node GUI(mongoDB图形化界面)

    adminMongo:mongoDB node GUI(mongoDB图形化界面) 获取项目项目 克隆:git clone https://github.com/mrvautin/adminMongo ...

  7. 【Vegas原创】安装rhel6.2,不能进图形化界面的终极解决方法

    安装的时候,千万不要一路下一步,you should know,linux不是windows那么的傻瓜.   方法一: 在倒数最后一步,选择Desktop,而千万不要下一步,默认选择Basic Ser ...

  8. windows API 开发飞机订票系统 图形化界面 (一)

    去年数据结构课程设计的作品,c语言实现,图形化界面使用windows API实现. 首发在我csdn博客:http://blog.csdn.net/u013805360/article/details ...

  9. CentOS:安装桌面GNOME图形化界面

    u盘安装dvd版的CentOS7后,没有桌面,浏览器也是黑框版的:如果需要桌面的话,下面三条命令即可:但是安装桌面后,系统会没有之前纯净: 1 安装Gnome包: sudo yum groupinst ...

随机推荐

  1. Mysql——Innodb和Myisam概念与数据恢复

    Innodb和Myisam是Mysql常见的两种数据存储引擎.没有研究过Oracle.SQL Server等数据库,所以下面只针对Mysql. 一.两种方式的数据存储结构: 在Myisam下,数据库的 ...

  2. 【C++】模板简述(一):模板的引入

    我们在介绍模板之前,首先想象有这么一个场景: 我们需要通过C++写出一个通用的加法程序,那么有如下几种方法: 方法一:C++的函数重载 //int int int int Add(int l,int ...

  3. java io性能分析

    摘要: 本文大多技术围绕调整磁盘文件 I/O,但是有些内容也同样适合网络 I/O 和窗口输出. 第一部分技术讨论底层的I/O问题,然后讨论诸如压缩,格式化和串行化等高级I/O问题.然而这个讨论没有包含 ...

  4. Farseer.net轻量级ORM开源框架 V1.2版本升级消息

    V1.1到V1.2的更新,重构了很多类及方法,其中主要做了性能优化(取消所有反射,使用表达式树+缓存).解耦了SQL生成层(没有实体.队列的依赖,所有数据均通过表达式树传递解析) 先上内部更新历史记录 ...

  5. Vue 拦截器的使用

    拦截器 可以全局进行拦截器设置.拦截器在发送请求前或响应返回时做一些特殊的处理. 拦截器的注册 Vue.http.interceptors.push({ request: function ( req ...

  6. 使用迅为iTOP-iMX6开发板-uboot-修改默认环境变量

    iTOP-iMX6 开发板烧写好之后,默认是 android 系统 9.7 寸屏幕的系统参数和屏幕参数.如下图.本文档主要介绍如何修改默认启动参数. 1. 重要的环境变量比较重要的环境变量或者说经常使 ...

  7. 自定义对话框(jDialog)

    [配置项]jDialog options点击收起 一.接口功能 jDialog的默认配置项,本组件提供的所有对话框,都可以通过修改这些配置项来实现不同的效果. 二.详细配置项 /** * 对话框的默认 ...

  8. swift派发机制的核心是确定一个函数能否进入动态派发列表

    swift派发机制的核心是确定一个函数能否进入动态派发列表

  9. laravel UserRequest $request error

    laravel UserRequest $request error Ask Question   0   laravel5.2,I create a UserRequest.php under Re ...

  10. sh InvocationTargetException

    话题引入: 使用hibernate+struts框架开发项目时,使用占位符时,系统抛出如下异常: Exception: java.lang.reflect.InvocationTargetExcept ...