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