我想在使用vcs或dvcs时学习其他人的工作流程。
请描述您处理以下任务的策略:
随意组织您的答案,不按任务分组,但按您认为相关的任何分组,但请通过VCS / DVCS进行组织(请不要混淆)。
谢谢。
答案 0 :(得分:43)
所有VCS用于您提及的各种任务的主要功能是 branching :以协作方式隔离开发工作的能力。由于它是一个中央VCS,因此可以在同一个分支上进行协作,对文件进行悲观或乐观的锁定,以便开发并行历史记录。
但作为VCS对分支有两个主要影响:
现在:
任何VCS都会通过制作分支来实现这一点,但让我感到非常惊讶的是,“功能”分支并不容易:
*该功能可能会变得太复杂
*它可能会在下次发布时及时准备好
*只有部分内容可能需要合并回主开发分支
*它可能取决于尚未完全完成的其他功能
因此,您需要注意管理功能分支和提交的方式:如果它们与同一功能紧密相关,则会很顺利(当您执行时,将整个功能合并到主开发分支中)需要它)。否则,使用这些工具不容易进行部分合并。
开发期间和发布后的错误修复之间的区别在于,在前一种情况下,您通常可以在同一分支中线性地执行此操作,因为在后一种情况下,您将必须建立错误修复分支,并确定您将需要后端移植到当前开发分支的错误。
最好与外部工具(例如like Crucible)一起使用,并广泛使用blame或annotations等VCS函数,以便在审核后更好地分配代码修复。
如果重构是次要的,它可以在同一个分支中继续。但如果它很大,需要设置一个特殊的分支,在开始重构之前完成单元测试。
与上一点相同的评论。如果补丁很大,则需要创建分支。
VCS只会在发布应用时为您提供帮助,因为它不是发布管理工具。
您需要先确定要发布的版本(标签),但之后会出现涉及以下内容的部署过程:
VCS和发布管理的关键是:
发布机制也会对二进制依赖性产生影响:
您也可以选择在源依赖项中(并获取您自己需要的其他内部项目的所有源代码),并且VCS很适合于此,但重新编译所有内容并不总是可行/实用
答案 1 :(得分:36)
来自VCS的 DVCS (分布式版本控制)的主要区别在于(通过其分布式工作的本质)做一件事,一件事情:
<强>合并强>
所以你可以从这个角度看待你提到的任务 分支机构仍将制作,但并非所有分支机构都能看到它们。其中很多实际上不会离开您的本地存储库。
成为DVCS对合并有两个主要影响:
现在:
正如我在CVCS (Central VCS) answer中详述的那样,“功能”分支背后的困难在于许多子功能最终会交织在一起。
这是DVCS将发光的地方,因为它们将允许您重新组织其本地(如“未推送”)历史(Mercurial的变更集,Git的SHA1提交),以便促进部分合并或子功能分支创建。
如果需要,您几乎可以为每个bug修复创建一个分支。我们的想法是确保通过在开发分支(或维护分支,如果已发布)中合并的简单线性提交集来识别错误修复。
我prefer making sure to first rebase开发分支顶部的bug修复分支(以确保我的修复程序仍然符合可能已在所述主分支上并行完成的任何工作),然后将该dev分支与bug混合-fix one(快进合并:主分支现在引用所有修复)
责备或注释功能仍然有助于在代码审查期间分配任务,但这一次,所有开发人员不一定在一个站点上(因为它是* Distributed * VCS),而不是相同的识别方案(例如,不使用相同的LDAP)。
组织代码审查的DVCS方法是将新更改推送到特殊代码审核仓库,其中包括:
它们是在开发人员的本地仓库中,在一个分支中完成的(因为它很容易合并回来)
与上一节相同的过程。
实际的发布过程只是由您的软件的特殊标识(标记)版本启动。 (“发布管理流程”的其余部分,即部署和配置部分详见CVCS answer)
问题是,DVCS:
“你的软件的官方版本来自哪个存储库?”
您需要建立一个“中央”或“官方”存储库,它将扮演以下角色:
因此它可以用于发布目的,但也用于新的开发目的。