我和我的同事正在就发布/SCM系统中标签的价值和用法进行争论。我们期待StackOverflow社区发表他们的想法,帮助我们解决这个问题。
一方声称标签是对发布管理的一个有价值的补充。它们的使用示例:我们发布了一个Maven版本,它生成了一个新的Tag(称为1.0),这是用于此版本的代码快照。此标记应该是READONLY分支。当一个错误需要修复时,我们可以将Tag复制到一个新的分支中(称之为1.1)。这些修复可能会合并回Trunk,以便主开发分支获得错误修复。最后,1.1被释放,并且标签1.1被自动创建。这个循环还在继续。Tag的主要好处是,如果您出于任何原因需要重新发布1.0版本,您可以放心地发布Tag 1.0,因为它从未被任何人更改过。此外,说“发布标签1.0”比说“发布分支1.0的修订版1,即没有修复的原始1.0”更干净。
另一方声称,标签并没有提供任何有价值的好处,尤其是在像Subversion这样具有全局修订的系统中,它的作用就像CVS中的标签。此外,Subversion只在提交到Tag时发出警告;它实际上并没有阻止它。他们的方法正在Trunk中开发,发布后你会生成一个名为1.0的Branch。您可以继续在Trunk中修复错误,如果您需要将这些错误修复重新发布到生产中,您可以将它们合并到1.0 Branch中,然后重新发布1.0。在某个时候,也许在Trunk中的主要修复或功能之后,您将发布并制作Branch1.1。循环继续。如果您需要发布原始1.0版本,则必须签出Branch 1.0修订版1。
显然,这两种方法都有效。我想听听社区对哪种方法更可取以及为什么这样做的想法。
编辑:我有点担心“最佳”方式取决于底层的SCM系统。要么选择Subversion来获得答案,要么尽可能让它与SCM无关。