草庐IT

前端分支规范

夜尽 2023-03-28 原文

开发规模不大,结合比较正式的规范做了一些简化

基本概念

常设分支

  • master - 主分支,用于正式发布
  • develop - 开发分支,用于创建新开发feature分支

临时分支

  • feature/*** - 任务开发分支

  • release - 预发布分支

  • hotfix/*** - 线上热修分支

这三种分支都属于临时性需要,使用完以后,应该删除,使得代码库的常设分支始终只有Master和Develop。

环境

正式环境:production

测试环境:testing

开发环境:development

分支说明

master(主分支)

master为主分支,用于部署到正式环境production,一般由releasehotfix分支合并,所有提供给用户使用的正式版本,都在这个主分支上发布,任何情况下不允许直接在master分支上修改代码。

develop(开发)

develop为开发分支,始终保持最新完成以及 bug 修复后的代码,可根据需求大小程度(工时是否小于一天)确定是由 feature 分支合并,还是直接在上面开发。

持续集成、最新隔夜版本的生成等都是基于这个分支。

release(预上线分支、预发布分支)

release为预上线分支,用于部署到测试环境testing,发布正式版本之前(即合并到Master分支之前),我们可能需要有一个预发布的版本进行测试。从master或develop拉取,测试完成merge回master和develop

如果 存在 未测试完毕的需求,就基于master创建。

如果 不存在 未测试完毕的需求,就基于develop创建。

不建议直接在release分支上直接修改代码。

feature 分支

feature为需求开发分支,从develop拉取,开发feature完成,merge回develop,一旦该需求上线,便将其删除。

hotfix(线上热修分支)

hotfix 为紧急修复分支,从master拉取,修复并测试完成merge回master和develop,一旦修复上线,便将其删除。

基本流程

  1. 每开发一个新功能,创建一个feature分支,多人在此分支上开发;
  2. 提测时,将master分支和需要提测的分支汇总到一个release分支,发布测试环境;
  3. 发现bug时,在feature分支上debug后,再次回到2;
  4. 发布生产环境后,将release分支合并到master分支,删除release分支。

命令行示例:

# 1 从develop分支创建feature分支
git branch -b feature/branch-test develop

# 2-1 从master或develop分支(具体条件看上文,这里选择master)创建release分支
git branch -b release master

# 2-2 切换到release分支,把feature/branch-test分支合并到release分支
git checkout release
git merge feature/branch-test

# 4-1
git checkout master
git merge release

# 4-2 删除feature和release分支(本地)
git branch -d feature/branch-test
git branch -d release

删除分支:

# 清除本地remote
git remote prune origin
# 删除本地分支(-D为强制删除)
git branch -d|-D  [branchName]
# 删除远程分支
git push origin --delete [branchName]

其他场景

发布测试环境(release分支)

  1. 确认要发布的feature 分支上的功能是否开发完毕并提交;

  2. 创建release 分支(发布分支),将所有要发布的分支逐个合并到release分支,有如下情况:

  • feature分支(可能有多个)

  • master分支(期间可能有其他release版本更新到了master)

  1. 命名规则(可选):release-分支创建日期-新特性和待发布版本号

  2. 发布到测试环境,通知测试;

  3. 测试完成后删除本次发布的所有feature分支。

修复待发布版本中的Bug(feature分支)

如果发现bug,开发人员在 feature 分支上修复测试人员提交给自己的bug,修复完成后,合并到 release 分支,发布测试环境。

发布正式环境

  1. 根据修复后的release分支再次将master合并,打包发布生产环境;

  2. 确认发布成功,并线上验收通过后,将release分支合并到master分支;

  3. 在master分支上创建标签(可选),命名规则:tag-日期-新特性和版本号,版本可根据需要添加,作为发版里程碑标记;

  4. 删除对应release 分支。

修复线上Bug(hotfix分支)

  1. 从master 分支某个tag 上创建一个 hotfix 分支(热修复分支),一般是最新的tag应该和当前生产环境对应;

  2. 开发人员完成Bug 修复,提交hotfix分支到测试环境验收通过;

  3. 再次发布正式环境流程;

  4. 将 hotfix 分支合并到 master 分支;

  5. 在master分支上创建标签(可选),命名规则:tag-日期-新特性和版本号,版本可根据需要添加,作为发版里程碑标记;

  6. 删除 hotfix 分支。

有关前端分支规范的更多相关文章

  1. ruby - gem 规范失败 - 2

    我正在为毕业设计开发GEM,TravisCI构建不断失败。这是我在Travis上的链接:https://travis-ci.org/ricardobond/perpetuus/builds/8709218构建错误是:$bundleexecrakerakeaborted!Don'tknowhowtobuildtask'default'/home/travis/.rvm/gems/ruby-1.9.3-p448/bin/ruby_noexec_wrapper:14:in`eval'/home/travis/.rvm/gems/ruby-1.9.3-p448/bin/ruby_noexec_

  2. ruby - 如何让 GitHub 页面使用 master 分支? - 2

    我有一个使用Jekyll托管在GitHub上的静态网站。问题是,我真的不需要master分支,因为存储库唯一包含的是网站。这样我就必须gitcheckoutgh-pages,然后gitmergemaster,然后gitpushorigingh-pages。有什么简单的方法可以摆脱gh-pages分支并直接从master推送? 最佳答案 Theproblemis,Idon'treallyneedthemasterbranch,astheonlythingtherepositorycontainsisthewebsite.Isthere

  3. ruby - 如何禁止在 RSpec 中显示挂起(跳过)的规范? - 2

    我有几个跳过的规范。Pending:(Failureslistedhereareexpectedanddonotaffectyoursuite'sstatus)1)...#Notyetimplemented#./spec/requests/request_spec.rb:22如何抑制未决规范的输出? 最佳答案 您可以添加以下配置选项以从运行中过滤掉所有待处理的规范:RSpec.configuredo|config|config.filter_run_excludingskip:trueend此外,here是一个更详细的抑制输出的建议

  4. ruby-on-rails - 从帮助器规范中 stub 一个帮助器方法 - 2

    我正在构建Rails应用程序并使用RSpec制定测试。我为我正在创建的名为current_link_to的方法编写了测试。此方法应该检查当前页面是否对应于我传递给它的路径,并将current类添加到生成的链接中,以防它匹配。这是规范:require"spec_helper"describeApplicationHelperdodescribe"#current_link_to"dolet(:name){"Products"}let(:path){products_path}let(:rendered){current_link_to(name,path)}context"whenthe

  5. ruby-on-rails - 在 RSpec 中编写请求规范的正确方法是什么? - 2

    tl;dr:跳到最后一段最近一直在尝试使用RSpec的requestspecs做一些更有针对性的测试。我的测试主要是这样的:通用cucumber功能规范,即用户转到带有评论的帖子,对评论点赞,作者获得积分modelspecs当模型实际上具有某些功能时,即User#upvote(comment)controllerspecs我在其中stub了大部分内容,只是试图确保代码按照我期望的方式运行viewspecs当View中有一些复杂的东西时,例如仅在用户尚未投票时呈现upvote链接,这些被stub为好吧问题是当我有一些导致错误的特定场景时,一切似乎都在我无法重现它的模型/View层中工作。

  6. ruby-on-rails - 在 Rails 应用程序的前端获取实时日志 - 2

    在Rails3.x应用程序中,我正在使用net::ssh并向远程pc运行一些命令。我想向用户的浏览器显示实时日志。比如,如果两个命令在net中运行::ssh执行即echo"Hello",echo"Bye"被传递然后"Hello"应该在执行后立即显示在浏览器中。这是代码我在ruby​​onrails应用程序中使用ssh连接和运行命令Net::SSH.start(@servers['local'],@machine_name,:password=>@machine_pwd,:timeout=>30)do|ssh|ssh.open_channeldo|channel|channel.requ

  7. ruby-on-rails - 加速 RSpec 请求规范的方法 - 2

    我有33个规范以大约5秒的速度运行,以这种速度运行会导致测试套件变慢。我追踪到请求规范(4秒以上),因为模型规范只用了一小部分时间。我已经检查过,我的请求规范没有任何过于复杂或不必要的东西,所以我不知道该去哪里让它们更快,而不是只在推送代码之前运行它们以确保一切正常.加快请求规范的最佳方法是什么? 最佳答案 我使用Spork来加速我的测试。它保持整个环境加载以赢得时间。看看这个博客:http://ykyuen.wordpress.com/2010/12/14/rails-running-rspec-with-spork-test-s

  8. ruby - 如何在转换器插件中访问页面属性(YAML 前端) - 2

    我正在为Jekyll编写一个转换器插件,需要访问一些页眉(YAML前端)属性。只有内容被传递给主要的转换器方法,似乎无法访问上下文。例子:moduleJekyllclassUpcaseConverter关于如何在转换器插件中访问页眉数据有什么想法吗? 最佳答案 基于Jekyll源代码,无法在转换器中检索YAML前端内容。根据您的情况,我看到了两种可行的解决方案。您的文件扩展名可以具有足够的描述性,以提供您本应包含在前言中的信息。看起来Converter插件的设计就是这么基本的。如果修改Jekyll是一个选项,您可以更改Convert

  9. ruby-on-rails - Rspec 的 instance_double 创建间歇性规范失败 - 2

    我在使用instance_double时遇到间歇性测试失败。我有一个包含4个规范的文件。这是来源:require'rails_helper'describeSubmitPostdobefore(:each)do@post=instance_double('Post')allow(@post).toreceive(:submitted_at=)endcontext'onsuccess'dobefore(:each)doallow(@post).toreceive(:save).and_return(true)@result=SubmitPost.call(post:@post)endit

  10. ruby - 规范测试基于 EventMachine 的(Reactor)代码 - 2

    我正在尝试整个BDD方法并想测试AMQP基于Vanilla的方面Ruby我正在写的应用程序。选择Minitest后作为与其他名副其实的蔬菜框架不同的平衡功能和表现力的测试框架,我着手编写此规范:#File./test/specs/services/my_service_spec.rb#Requirementsfortestrunningandconfigurationrequire"minitest/autorun"require"./test/specs/spec_helper"#Externalrequires#MinitestSpecsforEventMachinerequire

随机推荐