草庐IT

svn - 描述您使用版本控制(VCS 或 DVCS)的工作流程

coder 2023-06-23 原文

关闭。这个问题需要更多focused .它目前不接受答案。












想改善这个问题吗?更新问题,使其仅关注一个问题 editing this post .

8年前关闭。




Improve this question




我想了解其他人在使用 vcs 或 dvcs 时的工作流程。

请描述您处理以下任务的策略:

  • 实现功能
  • 修复错误(在开发和部署应用程序期间)
  • 代码审查
  • 重构代码(post code-review)
  • merge 补丁
  • 发布新版本的应用程序(桌面、网络、移动,你会区别对待它们吗?)

  • 随意组织您的答案,而不是按任务分组,而是按您认为相关的任何内容分组,但请按 VCS/DVCS 组织(请不要将它们混合)。

    谢谢你。

    最佳答案

    所有 VCS 用于您提到的各种任务的主要功能是 branching :以协作方式隔离开发工作的能力。由于它是一个中央 VCS,多个开发人员可以在同一个分支上协作,对文件使用悲观或乐观锁,以开发并行历史。

    但是成为 VCS 对分支有两个主要影响:

  • 它倾向于阻止提交,因为一旦提交了文件,它将立即影响具有相同配置的其他 View 的工作区(即“在同一分支上工作”)。
    ~“发布”过程是一个积极的过程,立即产生后果,
    ~ 而“消费”部分(更新您的工作区)是被动的(您被迫在更新工作区后立即处理其他人发布的更改)
  • 它适用于 linear merge workflow (即“仅从分支 A merge 到分支 B,而不是在两个方向上混合 merge ”——A 到 B 到 A 到 B...)。 merge 是微不足道的,来自 A 的所有修改都简单地转移到 B

  • 现在:

    实现一个功能

    任何 VCS 都会通过创建分支来做到这一点,但令我惊讶的是,“功能”分支并不容易:
    * 该功能可能变得过于复杂
    * 可能会及时为下一个版本做好准备
    * 只有一部分可能需要 merge 回主开发分支
    * 它可能取决于尚未完全完成的其他功能

    因此,您需要在管理功能分支和提交的方式上小心:如果它们与同一功能紧密相关,那么它会顺利进行(在需要时将整个内容 merge 回主开发分支) .否则,使用这些工具进行部分 merge 并不容易。

    修复错误

    开发期间和发布后的bug修复的区别在于,在前一种情况下,您通常可以在同一分支中线性进行,而在后一种情况下,您必须建立一个bug-fix分支,并决定您要修复哪些错误需要向后移植到您当前的开发分支。

    代码审查

    它最适合与外部工具一起使用(例如 like Crucible),并广泛使用 VCS 功能,如blame 或 annotations,以便在审查后更好地分配代码修复。

    重构代码(post code-review)

    如果重构是次要的,它可以在同一个分支中进行。但是如果它很大,则需要设置一个特殊的分支,并在开始重构之前进行单元测试。

    merge 补丁

    与最后一点相同的评论。如果补丁很大,则需要创建一个分支。

    发布新版本的应用

    在发布您的应用程序时,VCS 只能让您走到这一步,因为它不是一个发布管理工具。
    您需要事先确定要发布的版本(标签),但之后是部署过程,其中涉及:
  • 停止当前正在运行的内容
  • 复制新文件
  • 部署它们(更新 sql 数据库、webapp 等)
  • 实例化所有配置文件(使用正确的值、地址、端口号、路径等)
  • 重新启动(如果您的系统由多个组件组成,请按正确顺序重新启动它们!)

  • VCS 和发布管理的关键是:
  • 它们不太适合存储要发布的二进制文件,这意味着您需要它们来构建您的应用程序,而不是存储生成的可执行文件
  • 它们在生产环境中并不总是受欢迎(其中安全约束限制了写入访问,以及在这些平台上运行的工具数量,主要是监控和报告工具)

  • 发布机制也对二进制依赖有影响:
  • 对于外部二进制依赖项,您可能会使用像 maven 这样的机制来获取外部库的固定修订版
  • 但是对于内部依赖,当你不只是开发一个应用程序而是几个依赖于另一个的应用程序时,你需要知道如何引用其他应用程序生成的二进制文件(内部二进制依赖项),它们通常不会被存储在您的 VCS 中(尤其是在开发阶段,您可以为其他应用程序生成许多不同的版本以供使用)

  • 您还可以选择在源依赖项中(并获取您自己需要的其他内部项目的所有源),并且 VCS 很好地适应了这一点,但重新编译所有内容并不总是可行/不切实际。

    关于svn - 描述您使用版本控制(VCS 或 DVCS)的工作流程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2704996/

    有关svn - 描述您使用版本控制(VCS 或 DVCS)的工作流程的更多相关文章

    1. ruby - 如何使用 Nokogiri 的 xpath 和 at_xpath 方法 - 2

      我正在学习如何使用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

    2. ruby - 使用 RubyZip 生成 ZIP 文件时设置压缩级别 - 2

      我有一个Ruby程序,它使用rubyzip压缩XML文件的目录树。gem。我的问题是文件开始变得很重,我想提高压缩级别,因为压缩时间不是问题。我在rubyzipdocumentation中找不到一种为创建的ZIP文件指定压缩级别的方法。有人知道如何更改此设置吗?是否有另一个允许指定压缩级别的Ruby库? 最佳答案 这是我通过查看ruby​​zip内部创建的代码。level=Zlib::BEST_COMPRESSIONZip::ZipOutputStream.open(zip_file)do|zip|Dir.glob("**/*")d

    3. ruby - 为什么我可以在 Ruby 中使用 Object#send 访问私有(private)/ protected 方法? - 2

      类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

    4. ruby-on-rails - 使用 Ruby on Rails 进行自动化测试 - 最佳实践 - 2

      很好奇,就使用ruby​​onrails自动化单元测试而言,你们正在做什么?您是否创建了一个脚本来在cron中运行rake作业并将结果邮寄给您?git中的预提交Hook?只是手动调用?我完全理解测试,但想知道在错误发生之前捕获错误的最佳实践是什么。让我们理所当然地认为测试本身是完美无缺的,并且可以正常工作。下一步是什么以确保他们在正确的时间将可能有害的结果传达给您? 最佳答案 不确定您到底想听什么,但是有几个级别的自动代码库控制:在处理某项功能时,您可以使用类似autotest的内容获得关于哪些有效,哪些无效的即时反馈。要确保您的提

    5. ruby - 在 Ruby 中使用匿名模块 - 2

      假设我做了一个模块如下:m=Module.newdoclassCendend三个问题:除了对m的引用之外,还有什么方法可以访问C和m中的其他内容?我可以在创建匿名模块后为其命名吗(就像我输入“module...”一样)?如何在使用完匿名模块后将其删除,使其定义的常量不再存在? 最佳答案 三个答案:是的,使用ObjectSpace.此代码使c引用你的类(class)C不引用m:c=nilObjectSpace.each_object{|obj|c=objif(Class===objandobj.name=~/::C$/)}当然这取决于

    6. ruby - 使用 ruby​​ 和 savon 的 SOAP 服务 - 2

      我正在尝试使用ruby​​和Savon来使用网络服务。测试服务为http://www.webservicex.net/WS/WSDetails.aspx?WSID=9&CATID=2require'rubygems'require'savon'client=Savon::Client.new"http://www.webservicex.net/stockquote.asmx?WSDL"client.get_quotedo|soap|soap.body={:symbol=>"AAPL"}end返回SOAP异常。检查soap信封,在我看来soap请求没有正确的命名空间。任何人都可以建议我

    7. python - 如何使用 Ruby 或 Python 创建一系列高音调和低音调的蜂鸣声? - 2

      关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭4年前。Improvethisquestion我想在固定时间创建一系列低音和高音调的哔哔声。例如:在150毫秒时发出高音调的蜂鸣声在151毫秒时发出低音调的蜂鸣声200毫秒时发出低音调的蜂鸣声250毫秒的高音调蜂鸣声有没有办法在Ruby或Python中做到这一点?我真的不在乎输出编码是什么(.wav、.mp3、.ogg等等),但我确实想创建一个输出文件。

    8. ruby-on-rails - 由于 "wkhtmltopdf",PDFKIT 显然无法正常工作 - 2

      我在从html页面生成PDF时遇到问题。我正在使用PDFkit。在安装它的过程中,我注意到我需要wkhtmltopdf。所以我也安装了它。我做了PDFkit的文档所说的一切......现在我在尝试加载PDF时遇到了这个错误。这里是错误:commandfailed:"/usr/local/bin/wkhtmltopdf""--margin-right""0.75in""--page-size""Letter""--margin-top""0.75in""--margin-bottom""0.75in""--encoding""UTF-8""--margin-left""0.75in""-

    9. ruby-on-rails - 'compass watch' 是如何工作的/它是如何与 rails 一起使用的 - 2

      我在我的项目目录中完成了compasscreate.和compassinitrails。几个问题:我已将我的.sass文件放在public/stylesheets中。这是放置它们的正确位置吗?当我运行compasswatch时,它不会自动编译这些.sass文件。我必须手动指定文件:compasswatchpublic/stylesheets/myfile.sass等。如何让它自动运行?文件ie.css、print.css和screen.css已放在stylesheets/compiled。如何在编译后不让它们重新出现的情况下删除它们?我自己编译的.sass文件编译成compiled/t

    10. ruby - 使用 ruby​​ 将 HTML 转换为纯文本并维护结构/格式 - 2

      我想将html转换为纯文本。不过,我不想只删除标签,我想智能地保留尽可能多的格式。为插入换行符标签,检测段落并格式化它们等。输入非常简单,通常是格式良好的html(不是整个文档,只是一堆内容,通常没有anchor或图像)。我可以将几个正则表达式放在一起,让我达到80%,但我认为可能有一些现有的解决方案更智能。 最佳答案 首先,不要尝试为此使用正则表达式。很有可能你会想出一个脆弱/脆弱的解决方案,它会随着HTML的变化而崩溃,或者很难管理和维护。您可以使用Nokogiri快速解析HTML并提取文本:require'nokogiri'h

    随机推荐