我在一个由 4 名 .Net 开发人员组成的小组中工作。我们很少同时处理同一个项目,但这种情况时有发生。我们使用 TFS 进行源代码控制。我最近的示例是我昨晚刚刚投入生产的一个项目,其中包括 2 个 WCF 服务和一个 Web 应用程序前端。我在一个名为“prod”的分支工作,因为该应用程序是全新的并且从未见过。现在该项目已经上线,我需要从 prod 分支分支以获取功能、错误等...
那么最好的方法是什么?
我是否简单地创建一个新分支并将旧分支存档并且不再使用它?
当我想部署到生产环境时,我是否要分支然后将我的分支更改合并回 prod 分支?
文件和程序集版本呢?它们目前为 1.0.0.0。他们什么时候改变,为什么?如果我修复了一个小错误,哪个数字会发生变化?如果我添加一项功能,哪个数字会发生变化?
我正在寻找的是您发现的有效管理源代码控制的最佳方式。我工作过的大多数地方似乎总是在途中或其他地方与源代码控制系统发生冲突,我只是想找出您发现的最有效的方法。
最佳答案
最好有一个单独的分支来支持每个已发布的版本,另一个分支用于继续开发。这样一来,无论您在主分支上开发的新功能如何,您始终可以为旧版本生成错误修复版本。
从长远来看,最好将主分支作为你的开发分支,并为每个特定的版本创建一个单独的支持分支;这使您的分支路径变短。 (我从事过一个项目,其中实际工作分支的路径类似于 main/release_1.0/release_1.1/release_1.5/release_2.0/release_2.1...不想走那条路 :-)
当然,您需要定期将在支持分支上所做的任何修复合并回主分支 - 至少在创建下一个版本之前。我的经验是,绝对不建议将合并留到最后一分钟——合并越晚,两个分支之间的差异就越大,因此遇到麻烦的机会就越大。如果合并更改的复杂性超过某个阈值,自动合并工具就会放弃……并且手动合并并不好玩。
在很大程度上,版本控制可能是个人偏好的问题。在小型项目中,您可能对 major.minor 版本方案感到满意,在大型项目中,您可能还希望使用补丁和/或构建版本号进行更精细的控制。
你需要制定一个版本策略然后坚持下去。例如。如果您使用 major.minor 版本方案,请为错误修复版本增加次要版本,为新功能版本增加主要版本。
关于c# - 开发人员如何使用源代码控制,我试图找到在小型开发环境中进行源代码控制的最有效方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2833900/
我正在学习如何使用Nokogiri,根据这段代码我遇到了一些问题:require'rubygems'require'mechanize'post_agent=WWW::Mechanize.newpost_page=post_agent.get('http://www.vbulletin.org/forum/showthread.php?t=230708')puts"\nabsolutepathwithtbodygivesnil"putspost_page.parser.xpath('/html/body/div/div/div/div/div/table/tbody/tr/td/div
总的来说,我对ruby还比较陌生,我正在为我正在创建的对象编写一些rspec测试用例。许多测试用例都非常基础,我只是想确保正确填充和返回值。我想知道是否有办法使用循环结构来执行此操作。不必为我要测试的每个方法都设置一个assertEquals。例如:describeitem,"TestingtheItem"doit"willhaveanullvaluetostart"doitem=Item.new#HereIcoulddotheitem.name.shouldbe_nil#thenIcoulddoitem.category.shouldbe_nilendend但我想要一些方法来使用
类classAprivatedeffooputs:fooendpublicdefbarputs:barendprivatedefzimputs:zimendprotecteddefdibputs:dibendendA的实例a=A.new测试a.foorescueputs:faila.barrescueputs:faila.zimrescueputs:faila.dibrescueputs:faila.gazrescueputs:fail测试输出failbarfailfailfail.发送测试[:foo,:bar,:zim,:dib,:gaz].each{|m|a.send(m)resc
我正在尝试设置一个puppet节点,但rubygems似乎不正常。如果我通过它自己的二进制文件(/usr/lib/ruby/gems/1.8/gems/facter-1.5.8/bin/facter)在cli上运行facter,它工作正常,但如果我通过由rubygems(/usr/bin/facter)安装的二进制文件,它抛出:/usr/lib/ruby/1.8/facter/uptime.rb:11:undefinedmethod`get_uptime'forFacter::Util::Uptime:Module(NoMethodError)from/usr/lib/ruby
我想了解Ruby方法methods()是如何工作的。我尝试使用“ruby方法”在Google上搜索,但这不是我需要的。我也看过ruby-doc.org,但我没有找到这种方法。你能详细解释一下它是如何工作的或者给我一个链接吗?更新我用methods()方法做了实验,得到了这样的结果:'labrat'代码classFirstdeffirst_instance_mymethodenddefself.first_class_mymethodendendclassSecond使用类#returnsavailablemethodslistforclassandancestorsputsSeco
如何在buildr项目中使用Ruby?我在很多不同的项目中使用过Ruby、JRuby、Java和Clojure。我目前正在使用我的标准Ruby开发一个模拟应用程序,我想尝试使用Clojure后端(我确实喜欢功能代码)以及JRubygui和测试套件。我还可以看到在未来的不同项目中使用Scala作为后端。我想我要为我的项目尝试一下buildr(http://buildr.apache.org/),但我注意到buildr似乎没有设置为在项目中使用JRuby代码本身!这看起来有点傻,因为该工具旨在统一通用的JVM语言并且是在ruby中构建的。除了将输出的jar包含在一个独特的、仅限ruby
在rails源中:https://github.com/rails/rails/blob/master/activesupport/lib/active_support/lazy_load_hooks.rb可以看到以下内容@load_hooks=Hash.new{|h,k|h[k]=[]}在IRB中,它只是初始化一个空哈希。和做有什么区别@load_hooks=Hash.new 最佳答案 查看rubydocumentationforHashnew→new_hashclicktotogglesourcenew(obj)→new_has
我在我的项目中添加了一个系统来重置用户密码并通过电子邮件将密码发送给他,以防他忘记密码。昨天它运行良好(当我实现它时)。当我今天尝试启动服务器时,出现以下错误。=>BootingWEBrick=>Rails3.2.1applicationstartingindevelopmentonhttp://0.0.0.0:3000=>Callwith-dtodetach=>Ctrl-CtoshutdownserverExiting/Users/vinayshenoy/.rvm/gems/ruby-1.9.3-p0/gems/actionmailer-3.2.1/lib/action_mailer
我正在编写一个包含C扩展的gem。通常当我写一个gem时,我会遵循TDD的过程,我会写一个失败的规范,然后处理代码直到它通过,等等......在“ext/mygem/mygem.c”中我的C扩展和在gemspec的“扩展”中配置的有效extconf.rb,如何运行我的规范并仍然加载我的C扩展?当我更改C代码时,我需要采取哪些步骤来重新编译代码?这可能是个愚蠢的问题,但是从我的gem的开发源代码树中输入“bundleinstall”不会构建任何native扩展。当我手动运行rubyext/mygem/extconf.rb时,我确实得到了一个Makefile(在整个项目的根目录中),然后当
设置:狂欢ruby1.9.2高线(1.6.13)描述:我已经相当习惯在其他一些项目中使用highline,但已经有几个月没有使用它了。现在,在Ruby1.9.2上全新安装时,它似乎不允许在同一行回答提示。所以以前我会看到类似的东西:require"highline/import"ask"Whatisyourfavoritecolor?"并得到:Whatisyourfavoritecolor?|现在我看到类似的东西:Whatisyourfavoritecolor?|竖线(|)符号是我的终端光标。知道为什么会发生这种变化吗? 最佳答案