1

我正在运行 Tortoise SVN 来管理一个项目。显然,关于标记的原则适用于 SVN 的任何实现,但在这个问题中,我将参考一些 TortoiseSVN 特定的对话框和消息。


我的工作目录和 subversion 存储库结构都有一个 Source 根目录和下面的 Trunk、Tags 和 Branches 目录。(我不知道如何在不使用项目符号的情况下在 Markdown 中进行多级缩进层次结构,所以如果有人可以编辑和修复这个问题,我将不胜感激。)

我正在工作副本中的 Trunk 目录中工作,它指向 repo 中的 Trunk 目录。我想应用标签“Release1”,所以我单击“Branch/tag...”菜单选项并将 repo 路径设置为我的 [repo_path/bla/Source/Tags/Release1”标签。此对话框为我提供了选项到“将我的工作副本切换到新的分支/标签”。

我知道如果未选中此选项,将在 /Tags 下创建新的“Release1”分支,但我的工作副本将保留在以前的“Trunk”路径上。如果我选​​中此选项(或使用 Switch 命令)我了解我的工作副本将切换到“/Tags”下的新“Release1”分支。

我缺少一个概念的地方是如何做出这个决定。我似乎不想将我的工作目录切换到最近创建的标签,因为根据定义(?)我希望该标签成为我的代码在某个时间点的快照。如果我不切换工作目录,我将继续在 Trunk 上工作,当我准备好拍摄另一个快照时,我会制作另一个标签。等等...

我是否理解这一点,或者我是否在上一段中错误地陈述了某些内容(例如,关于不想切换到标签的声明,因为标签应该代表一个时间点快照)或以其他方式遗漏了有关如何做出此决定的内容?

4

3 回答 3

3

在 Subversion 中,标签不是您放在修订版上的“标签”;它是某个时间点的主干(或分支或其他)的副本。作为一个复制的目录,你可以提交它;但你不应该

一旦你做了一个标签,你应该留在原来的地方(分支或主干)并在那里工作,不要切换到标签目录。如果您提交到标签目录,您将更改其内容,然后它不再用作“快照”。

当你创建一个分支时,通常你会想要切换到它,但可能有一种情况是你希望在创建分支后留在主干中(例如,如果你碰巧注意到在主干中需要尽快修复);这是你的决定。您以后随时可以随时切换。创建标签时,无需做出太多决定。留在你所在的分支。我想不出切换到标签会有任何用处的任何情况......

于 2010-05-21T03:07:33.627 回答
1

在 Subversion 中,技术上没有“分支”或“标签”之类的东西。对于 SVN,它们只是目录的副本。它们之所以特别,只是因为对待它们的方式。

Tag = 复制一个项目,但复制后不要碰它。您通常不想切换到标签,因为您(通常)不会在那里提交任何更改。

分支 = 复制一个项目,并在那里做一些工作。通常,您在分支中所做的工作会在某个时候与主干合并。如果您要立即创建一个分支,您可能希望切换到该分支(选中该框)。

注意#1: 虽然 SVN 本身对主干/分支/标签没有任何特殊处理,但 TortoiseSVN 确实有一个 UI 提示来阻止提交标签。如果你签出一个标签(或制作一个标签并切换到它),做一些工作,然后尝试提交,TSVN 将显示一条警告消息。TSVN 试图猜测你真正想要做什么。

注意 #2:您不一定需要时间点快照的标签。存储库的修订号会为您执行此操作。

于 2010-05-21T12:42:51.673 回答
0

让我们更简单:

创建项目结构的推荐方法:

  • svnRoot/projectName/trunk(实际开发线)
  • svnRoot/projectName/tags/Release_X.XX (将标签视为标签,但它们只是副本)
  • svnRoot/projectName/branches/Release_X.XX(可以更新的副本,一个分支一个子项目)

永远不要提交标签(你可以但你不应该)。

如果您需要在不破坏其他人工作的情况下开发某些东西,请创建一个分支,然后将您的分支与主干合并,但要小心:)

于 2012-03-01T19:31:41.200 回答