开发规模不大,结合比较正式的规范做了一些简化
feature/*** - 任务开发分支
release - 预发布分支
hotfix/*** - 线上热修分支
这三种分支都属于临时性需要,使用完以后,应该删除,使得代码库的常设分支始终只有Master和Develop。
正式环境:production
测试环境:testing
开发环境:development
master为主分支,用于部署到正式环境production,一般由release或hotfix分支合并,所有提供给用户使用的正式版本,都在这个主分支上发布,任何情况下不允许直接在master分支上修改代码。
develop为开发分支,始终保持最新完成以及 bug 修复后的代码,可根据需求大小程度(工时是否小于一天)确定是由 feature 分支合并,还是直接在上面开发。
持续集成、最新隔夜版本的生成等都是基于这个分支。
release为预上线分支,用于部署到测试环境testing,发布正式版本之前(即合并到Master分支之前),我们可能需要有一个预发布的版本进行测试。从master或develop拉取,测试完成merge回master和develop。
如果 存在 未测试完毕的需求,就基于master创建。
如果 不存在 未测试完毕的需求,就基于develop创建。
不建议直接在release分支上直接修改代码。
feature为需求开发分支,从develop拉取,开发feature完成,merge回develop,一旦该需求上线,便将其删除。
hotfix 为紧急修复分支,从master拉取,修复并测试完成merge回master和develop,一旦修复上线,便将其删除。
feature分支,多人在此分支上开发;master分支和需要提测的分支汇总到一个release分支,发布测试环境;feature分支上debug后,再次回到2;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]
确认要发布的feature 分支上的功能是否开发完毕并提交;
创建release 分支(发布分支),将所有要发布的分支逐个合并到release分支,有如下情况:
feature分支(可能有多个)
master分支(期间可能有其他release版本更新到了master)
命名规则(可选):release-分支创建日期-新特性和待发布版本号
发布到测试环境,通知测试;
测试完成后删除本次发布的所有feature分支。
如果发现bug,开发人员在 feature 分支上修复测试人员提交给自己的bug,修复完成后,合并到 release 分支,发布测试环境。
根据修复后的release分支再次将master合并,打包发布生产环境;
确认发布成功,并线上验收通过后,将release分支合并到master分支;
在master分支上创建标签(可选),命名规则:tag-日期-新特性和版本号,版本可根据需要添加,作为发版里程碑标记;
删除对应release 分支。
从master 分支某个tag 上创建一个 hotfix 分支(热修复分支),一般是最新的tag应该和当前生产环境对应;
开发人员完成Bug 修复,提交hotfix分支到测试环境验收通过;
再次发布正式环境流程;
将 hotfix 分支合并到 master 分支;
在master分支上创建标签(可选),命名规则:tag-日期-新特性和版本号,版本可根据需要添加,作为发版里程碑标记;
删除 hotfix 分支。
我正在为毕业设计开发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_
我有一个使用Jekyll托管在GitHub上的静态网站。问题是,我真的不需要master分支,因为存储库唯一包含的是网站。这样我就必须gitcheckoutgh-pages,然后gitmergemaster,然后gitpushorigingh-pages。有什么简单的方法可以摆脱gh-pages分支并直接从master推送? 最佳答案 Theproblemis,Idon'treallyneedthemasterbranch,astheonlythingtherepositorycontainsisthewebsite.Isthere
我有几个跳过的规范。Pending:(Failureslistedhereareexpectedanddonotaffectyoursuite'sstatus)1)...#Notyetimplemented#./spec/requests/request_spec.rb:22如何抑制未决规范的输出? 最佳答案 您可以添加以下配置选项以从运行中过滤掉所有待处理的规范:RSpec.configuredo|config|config.filter_run_excludingskip:trueend此外,here是一个更详细的抑制输出的建议
我正在构建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
tl;dr:跳到最后一段最近一直在尝试使用RSpec的requestspecs做一些更有针对性的测试。我的测试主要是这样的:通用cucumber功能规范,即用户转到带有评论的帖子,对评论点赞,作者获得积分modelspecs当模型实际上具有某些功能时,即User#upvote(comment)controllerspecs我在其中stub了大部分内容,只是试图确保代码按照我期望的方式运行viewspecs当View中有一些复杂的东西时,例如仅在用户尚未投票时呈现upvote链接,这些被stub为好吧问题是当我有一些导致错误的特定场景时,一切似乎都在我无法重现它的模型/View层中工作。
在Rails3.x应用程序中,我正在使用net::ssh并向远程pc运行一些命令。我想向用户的浏览器显示实时日志。比如,如果两个命令在net中运行::ssh执行即echo"Hello",echo"Bye"被传递然后"Hello"应该在执行后立即显示在浏览器中。这是代码我在rubyonrails应用程序中使用ssh连接和运行命令Net::SSH.start(@servers['local'],@machine_name,:password=>@machine_pwd,:timeout=>30)do|ssh|ssh.open_channeldo|channel|channel.requ
我有33个规范以大约5秒的速度运行,以这种速度运行会导致测试套件变慢。我追踪到请求规范(4秒以上),因为模型规范只用了一小部分时间。我已经检查过,我的请求规范没有任何过于复杂或不必要的东西,所以我不知道该去哪里让它们更快,而不是只在推送代码之前运行它们以确保一切正常.加快请求规范的最佳方法是什么? 最佳答案 我使用Spork来加速我的测试。它保持整个环境加载以赢得时间。看看这个博客:http://ykyuen.wordpress.com/2010/12/14/rails-running-rspec-with-spork-test-s
我正在为Jekyll编写一个转换器插件,需要访问一些页眉(YAML前端)属性。只有内容被传递给主要的转换器方法,似乎无法访问上下文。例子:moduleJekyllclassUpcaseConverter关于如何在转换器插件中访问页眉数据有什么想法吗? 最佳答案 基于Jekyll源代码,无法在转换器中检索YAML前端内容。根据您的情况,我看到了两种可行的解决方案。您的文件扩展名可以具有足够的描述性,以提供您本应包含在前言中的信息。看起来Converter插件的设计就是这么基本的。如果修改Jekyll是一个选项,您可以更改Convert
我在使用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
我正在尝试整个BDD方法并想测试AMQP基于Vanilla的方面Ruby我正在写的应用程序。选择Minitest后作为与其他名副其实的蔬菜框架不同的平衡功能和表现力的测试框架,我着手编写此规范:#File./test/specs/services/my_service_spec.rb#Requirementsfortestrunningandconfigurationrequire"minitest/autorun"require"./test/specs/spec_helper"#Externalrequires#MinitestSpecsforEventMachinerequire