• Git应用实践


    Git是Linus Torvalds同学为linux kernal开发的版本管理系统。九九房使用git进行版本管理,这篇博文不打算介绍git本身,不忽悠大家使用git,仅介绍九九房是如何使用git的,非常欢迎大家讨论和拍砖。关于git本身的内容,请见:http://git-scm.com/

    用git管理哪些内容

    目前我们用git管理的内容有:

    1. 源代码
    2. 二进制程序及其配置文件
    3. 系统应用程序的配置文件,如nginx, apache, mysql等的配置文件
    4. 系统配置文件,如hosts文件等

    用git管理这些内容的原因有两个:

    1. 版本管理,可以看到相关修改历史,可以方便回到任意历史状态
    2. 方便上线到多台机器,使多台机器的配置一致
    组织结构和权限管理

    虽 然git是分布式的版本管理系统,非常适合linux kernal这类开发者分布广泛,结构松散的工程,对于九九房这样合作紧密的小型团队来说,有一个中心仓储还是要方便很多。我们定义了一个中心仓储,每个 研发人员和中心仓储交互,一般情况下不和其他人员直接交互。我们使用gitosis进行权限管理。

    库组织

    在库组织时我们考虑以下因素:

    1. 逻辑组织:逻辑上是否是一个独立的工程,是否需要一个独立的库
    2. 部署:因为我们实现了一套基于git库的测试、上线流程,如果一个工程需要独立的测试、上线流程,其可以是一个独立的git库
    3. 权限管理:因为git是个内容管理系统,它将整个库做为一个整体管理,无法仅clone某个子文件夹或对某个子文件夹设立权限,所以有独立权限管理要求的工程应独立为一个库。
    标准分支

    除 默认的master分支外,我们定义了两个标准的分支:test和online分支,其中test分支是我们测试环境所在的分支,为正在测试的内容,这个 分支的内容来自master分支,如果测试通过,test分支的内容将会进入online分支,online分支是线上机器所在的分支,进入到 online分支就意味着上线了。

    使用流程

    为了支持基于git库的测试和上线流程,我们开发了以下脚本:

    1. pushtest:需要将工程的内容放到测试环境运行这个脚本,这个脚本完成如下工作
      1. 将master分支的内容push到test分支
      2. tag这一次行为
      3. 执行该工程进入测试环境后的后续动作,比如编译,重启服务等
    2. pushonline:上线时使用这个脚本,这个脚本完成如下工作
      1. 将test分支的内容push到online分支
      2. tag这一次行为
      3. 执行该工程进入上线环境后的后续动作
    3. rollback:上线发现问题后使用这个脚本回退,这个脚本完成如下工作
      1. 将online分支上的内容回退到上一个线上版本
      2. tag这一次行为
      3. 执行该工程进入上线环境后的后续动作

    有了以上三个脚本,使用流程就很简单了:

    1. 本地开发,commit
    2. 和中心仓储merge
    3. push到中心仓储
    4. pushtest进入测试环境
    5. 测试通过后由上线人员pushonline
    开发过程的最佳实践

    在本地开发时,我们遵循以下最佳实践

    1. 分 支原则:以可上线功能为单位在相应分支上开发,如果一项功能可以单独上线,则为其创立一个分支,并在该分支上开发该功能。如果该功能的开发需要多人合作, 或者该功能的开发需要时间超过2天,但应将该分支push到中心仓储。如果一个研发人员同时工作于几项可以单独上线的工作,则应该为这些工作创建各自的分 支。
    2. commit原则:commit的颗粒度尽量小,以可能被cherry-pick到其他分支为准,如果两项改动可能被两次cherry-pick到其他分支,则应该是两次commit。
    3. commit review:commit之前先git diff和git status看是否是包含且仅包含这次想commit的内容。
    4. 合并原则:在master上合并分支
    5. 分支删除原则:一项改动,在其被合并到master并成功上线后删除。

    以上是九九房在工程实践中对git应用的粗略总结,希望能给大家一些参考,欢迎大家和我们做进一步的交流。

  • 相关阅读:
    ASP.NET存储过程自定义分页详解
    ajax php POST 提交例子
    一个用存储过程的基本分页及其调用
    DataGrid 存储过程的分页
    无刷新无限级菜单联动
    asp.net URL多参数傳值以及特殊符号传值问题
    ASP.NET页面间参数的传递
    Android动画开发——Animation动画效果
    android surface
    Android控件属性——android:cacheColorHint=“#00000000”
  • 原文地址:https://www.cnblogs.com/shihao/p/2171294.html
Copyright © 2020-2023  润新知