如何在 eclipse 的 svn 中使用主干、分支、标签?

How to use trunk, branches, tags in svn from eclipse?

这是我想知道的。

我们将开发一个软件并发布它的主要版本v1.0。

将该版本投入生产后,如果我们发现任何错误,我们将修复这些错误并提供补丁版本 p1.0.1 以应用于现有主要版本 v1.0,该版本仅包含针对错误修改的 类使固定。它会继续,就像每当发现任何错误或必须应用增强功能一样,我们将发布一个新的补丁版本以应用于现有的主要版本和现有的补丁。

那么,我们如何才能只维护特定补丁版本的修改后的源 (java) 文件?就像我们需要拥有完整的源代码一样,我们必须单独维护补丁源。我们必须在 SVN 中同步此代码,因为有多个人参与错误修复和修补。

Trunk, Branches, Tags 能满足我们的需求吗?

求推荐。

有几种标准的开发方法。我喜欢所谓的 unstable trunk 方法。

在不稳定的主干中,您在主干上进行所有开发。大家一起工作。我们有 100 多名开发人员,对此没有任何问题。它迫使开发人员一起工作,进行小的更改,并不断提交这些更改。

它也适用于像 Jenkins 这样的持续集成构建器。

当您到达某个 魔法点 时,您会创建一个 发布分支 。这是什么魔法点?这取决于。这个想法是,当您接近发布时,您将有一些开发人员致力于即将发布的版本,而一些开发人员则致力于将进入下一个版本的功能。两个小组并行工作意味着分支。

在某些组中,这是当您到达候选发布点或者当您在发布上完成功能时,现在您只是修复错误。那时,您为您的发布创建了一个分支。我们的标准是在您发布后调用该分支。

示例:创建版本

您有一个由 10 名开发人员组成的团队。您正在开发 1.2 版。目前所有工作都在主干上。现在发布已接近完成,您指派其中两名开发人员与 QA 和 UAT 一起修复代码并处理发布。所有其他开发人员都在继续他们的工作。

您创建了一个名为 1.2 的分支,使用 svn cptrunk 复制到 branches/1.2。现在,这两个负责 QA 和 UAT 的开发人员在 Branch 1.2 上工作,其余的继续在 trunk 上工作。

准备好发布代码后,您可以使用svn cpbranches/1.2复制到tags/1.2

您现在在 1.2 版本中修复了一些错误,这些错误可能适用于您在 trunk 中处理的 1.3 版本。在这种情况下,您可以使用 svn merge -c $REV,其中 $REV 是您修复相关错误的 Subversion 中的修订版。请注意,没有重新整合。您只需将 branches/1.2 中的补丁应用到 trunk.

示例:补丁发布

您发布了 1.2 版,并发现了一个严重错误。客户等不及 1.3 版了,所以您现在就修复错误并创建 1.2.1 版。

在这种情况下,因为您已经有了 branches/1.2,您只需修补那个分支,然后当您准备好发布时,将 1.2 分支复制到 tags/1.2.1.

再一次,您通过 svn merge -c $REV.

branches/1.2 中的个人更改合并到主干

NOTE: There's no need to create a 1.2.1 branch. However, there's not anything preventing you to do that if you so prefer. You could have copies tags/1.2 to branches/1.2.1 and do your work there. Then, you could copy branches/1.2.1 to tags/1.2.1 when you do a release.

The only possible issue is that your branching is from trunk->branches/1.2->tags/1.2->branches/1.2.1. Merging /branches/1.2.1 back into trunk use to cause problems in older versions of Subversion. This shouldn't realy be an issue in Subversion 1.6 or greater.

还有一条建议:不要重复使用版本名称或标签。您可以谈论版本 1.2,但每个补丁都应标记为 1.2.1、1.2.2、1.2.3 等。或者,1.2p1、1.2p2。关键是您应该能够指出您已交付生产的每一个版本。如果您想知道补丁 #3 中发生了什么变化,您可以在 1.2.2 和 1.2.3 之间进行比较。