zoukankan      html  css  js  c++  java
  • git

    git 团队开发流程规范

    0.3662017.10.09 16:44:09字数 603阅读 5,050

    git开发流程规范

    最近公司在由 svn 转为 git 做项目管理,之前在小团队开发的时候最多也就用到 dev 分支和 bugfix 分支,来到新的公司团队比较大,各自负责各自的功能模块,为了大家更规范的开发,公司参考了一些资料。制定了一下规则。

    分支命名规则

    1. 主分支:master
    2. 开发分支:developer
    3. 功能分支:feature - 分支名称
    4. 分支发布:release - 版本号
    5. bug 分支修复:bugfix - 版本号

    操作步骤

    1. 管理员「项目负责人」创建 git 仓库,建立 developer 分支

      git branch develop 
      git push -u origin develop
      
    2. 项目成员「开发者」clone 项目,在本地建立自己功能分支

      git clone 项目 git 地址 
      git checkout -b develop origin/develop
      
      创建本地功能分支
      git checkout -b feature-[name-desc] develop
      
    3. 在自己的分支上进行开发 : git add ,git commit 等,注意此时不要 push 到远程分支(origin)。

    4. 功能完成后可以直接合并本地的 developer 分支后 push 到远程仓库,合并的时候很大几率发生冲突,此时需要 merge ,merge的时候确保不影响项目其他成员,如果多个人都操作了同一个类,最好当面确认后在进行修改。等合并完成确认无误后,删除本地开发分支

      git checkout develop 
      
      git pull origin develop //确保本地 developer 分支为最新的
      
      git merge feature-[name-desc] 
      
      git push 
      
      git branch -d feature-[name-desc] //删除本地分支
      
      
    5. 发布分支

      git checkout -b release-0.1 develop
      
      一旦准备好了发版,合并修改到 master 分支和 developer 分支上,删除发布分支
      
      合并修改到 master 分支
      git checkout master 
      git merge release-0.1 
      git push 
      
      合并修改到 developer 分支
      git checkout develop 
      git merge release-0.1 
      git push 
      
      删除发布分支
      git branch -d release-0.1
      
    6. 为 master 分支打发版 tag

      git checkout master 
      git tag -a 0.1 -m "Initial public release" master 
      git push --tags
      
    7. bug 修复分支,如果正在开发功能的同时,developer 上发现了线上 bug,或者未上线的 bug,我们可以开一个 bugfix 分支来修复 bug

      git checkout -b bugfix-#001(bug 分支名称) master(或 developer)
      
      /***  去修 bug 吧 */
      ....
      /***  修复完成 */
      git checkout master  
      git merge bugfix-#001 
      
      git push 
      git branch -d bugfix-#001




      团队协作开发中,大部分都会用到版本控制软件,比如Git、Svn等。本文将通过一个实例,详细讲解在真实的工作环境中,一个团队应该如何利用Git+Github进行协作开发,即详解Git工作流程。并就其中比较棘手的问题作出解答,比如如何解决冲突比较合适,如何建立各种类型的分支等。

      本文不会讲解Git简介、Git原理、Git基本用法等,有不了解的可以参考“ Git 参考手册 ”。我们举例演示的是GitFlow工作流的功能,这里先放一张经典的GitFlow工作流图示:

      其中涉及到的主要分支类型有:

      • master分支,即主分支。任何项目都必须有个这个分支。对项目进行tag或发布版本等操作,都必须在该分支上进行。
      • develop分支,即开发分支,从master分支上检出。团队成员一般不会直接更改该分支,而是分别从该分支检出自己的feature分支,开发完成后将feature分支上的改动merge回develop分支。同时release分支由此分支检出。

      • release分支,即发布分支,从develop分支上检出。该分支用作发版前的测试,可进行简单的bug修复。如果bug修复比较复杂,可merge回develop分支后由其他分支进行bug修复。此分支测试完成后,需要同时merge到master和develop分支上。

      • feature分支,即功能分支,从develop分支上检出。团队成员中每个人都维护一个自己的feature分支,并进行开发工作,开发完成后将此分支merge回develop分支。此分支一般用来开发新功能或进行项目维护等。

      • fix分支,即补丁分支,由develop分支检出,用作bug修复,bug修复完成需merge回develop分支,并将其删除。所以该分支属于临时性分支。

      • hotfix分支,即热补丁分支。和fix分支的区别在于,该分支由master分支检出,进行线上版本的bug修复,修复完成后merge回master分支,并merge到develop分支上,merge完成后也可以将其删除,也属于临时性分支。

      下边我们一步步拆分讲解各种类型分支的用法。

      (1)假设团队就一个人“xianhu”,做一个叫TestGit的项目,并将其代码托管在Github上。首先需要在Github上新建一个项目TestGit:

      按照Github上的提示,在本地新建一个项目,并关联到Github上的orgin/master。此时开发一个很小的demo功能,并提交到线上,并在master分支上进行打tag操作,并命名为v0.1。此时的GitFlow工作流为:

      (2)如果此时master分支的代码正在线上运行,而且又需要开发新功能,则不能在master分支上直接修改。一个比较好的策略是在master分支上新建并检出develop分支,新功能的开发在develop分支上进行,此时记得将develop分支提交到远端:

      git branch develop master    # 从master分支上新建develop分支
      git checkout develop    # 检出develop分支
      # 此处可进行功能开发,并add和commit到develop分支
      git push origin develop    # 推送develop分支到远端的origin/develop

      即Github上保持两个分支:master和develop。目的是为以后团队协作更新develop分支做准备。此时Github上为:

      此时会出现两种情况:

      • 线上版本的代码(master分支)出现了紧急bug,需要修复。这里用到了hotfix分支。
      • git checkout master    # 切换回master分支
        git checkout -b hotfix master    # 新建hotfix分支,并切换到该分支
        # 做一些bug修复工作
        git checkout master    # 切换回master分支
        git merge --no-ff hotfix    # 合并hotfix分支,此时bug已被修复(无冲突)
        git tag v0.2    # 新建tag v0.2
        git push origin master    # 推送master分支代码到远端
        git push origin --tags    # 推送tag到远端
      • develop分支上的功能开发完成了,需要进行测试和提交。这里用到了release分支。
      • git checkout develop    # 切换回develop分支
        git checkout -b release01 develop    # 新建release分支,并切换到该分支
        
        # 做一些测试、bug修复等工作
        
        git checkout develop    # 切换回develop分支
        git merge --no-ff release01  # 合并release01分支到develop分支(无冲突)
        git push origin develop    # 推送develop分支到远端
        
        git checkout master    # 切换回master分支
        git merge --no-ff release01   # 合并release01分支到master分支(无冲突)
        git tag v0.3    # 新建tag v0.3
        git push origin master    # 推送master分支代码到远端
        git push origin --tags    # 推送tag到远端

      此时GitFlow工作流为:

      (3)这里可以继续develop分支,并不断push到远端。此时如果团队成员增加,多人需要开发不同的功能,这里就会用到feature分支。团队中的每个人都从Github克隆一个项目,然后新建自己的feature分支。

      git clone xxxx.git
      git checkout develop
      git checkout -b feature-xx develop    # 从develop分支新建并检出feature分支

      此时“xianhu”做如下操作,并首先第一个提交到了Github远端:

      git checkout -b feature-hu develop    # 从develop分支新建并检出feature分支
      # 这里可以进行一些功能开发,并不断的add和commit
      git checkout develop    # 切换回develop分支
      git pull origin develop    # 更新远端代码,看develop分支是否有更新(无更新)
      git checkout feature-hu    # 切换回feature分支
      git rebase develop    # 合并develop分支到feature分支,并解决冲突(无冲突)
      git checkout develop    # 切换回develop分支
      git merge --no-ff feature-hu    # 合并feature分支到develop分支
      git push origin develop   # 推送develop分支到远端

      此时的GitFlow工作流为:

      对于团队其他成员,比如zz,操作如下,并打算在“xianhu”提交后进行push操作:

      git checkout -b feature-zz develop    # 从develop分支新建并检出feature分支
      # 这里可以进行一些功能开发,并不断的add和commit
      git checkout develop    # 切换回develop分支
      git pull origin develop    # 更新远端代码,看develop分支是否有更新(有更新)
      git checkout feature-hu    # 切换回feature分支
      git rebase develop    # 合并develop分支到feature分支,并解决冲突(有冲突)
      # 这里需要进行冲突解决
      git add .    # 解决完冲突之后执行add操作
      git rebase --continue    # 继续刚才的rebase操作
      git checkout develop    # 切换回develop分支
      git merge --no-ff feature-zz    # 合并feature分支到develop分支(无冲突)
      git push origin develop   # 推送develop分支到远端

      如果团队成员在合并feature分支到develop分支后还需要继续开发,则检出自己的feature分支继续操作,并重复上述过程即可。这里需要注意--no-ff参数,其目的是让commit的流程更加清晰,具体为什么可自行百度。

      xianhu这边进行pull操作,即可看到zz进行的操作。此时的GitFlow工作流为:

      (4)如果此时需要进行测试、发版操作,则需要再次新建并检出release分支,重复(2)的步骤。完成之后的GitFlow工作流为:

      这里就完成了从版本v0.1到v1.0的迭代开发,并详细解释了如何利用Git+Github进行团队协作开发。文章中没有用到fix分支,这种分支的用法和feature分支类似,大家可以自己体会。

      最后详细解释一下上张图:

      • xianhu在master分支上完成v0.1版本开发,“done demo in master”
      • 发现master分支上有bug,需紧急修复。新建并检出hotfix分支进行bug修复,并merge回master分支,发布版本v0.2。
      • xianhu新建并检出develop分支进行迭代开发,然后在develop分支上检出release01分支,进行发版前测试和bug修复。“fix bugs in release01”,完成后将release01分支merge回develop和master分支,并在master分支上发布版本v0.3。
      • xianhu继续开发develop分支。此时团队成员增加,团队中的每个人都在develop的基础上新建并检出自己的feature分支,开发完成后merge回develop分支。这里利用到了rebase操作和冲突解决等,需要特别注意一点步骤。
      • xianhu在develop分支上检出release02分支,再次进行发版前测试和bug修复,“fix bugs in release02”,完成后将release02分支merge回develop和master分支,并在master分支上发布版本v1.0。

      这里只用到和解释了GitFlow工作流,团队协作开发也可以用Pull Requests或者其他方式,找一个合适自己团队和具体业务的协作方式即可。另外,Git博大精深,想要完全精通也绝非易事,只能是一边学一边用。

      来自:https://zhuanlan.zhihu.com/p/23478654

    主动一点,世界会更大!
  • 相关阅读:
    linux系统/var/log目录下的信息详解
    SQL 显示表名显示列名
    P2P平台介绍
    outlook署名最后一行没换行
    CSS3下的渐变文字效果实现
    SSH(poderosa)を使って、さくらのMySQLサーバーに接続する方法
    内网IP外网IP的关联及访问互联网原理
    自己吃的哑巴亏,怎么也要吞下去
    解决Ehcache缓存警告问题
    管理的艺术
  • 原文地址:https://www.cnblogs.com/sweet-li/p/13595411.html
Copyright © 2011-2022 走看看