【问题标题】:SVN Multiple Branch TaggingSVN 多分支标记
【发布时间】:2025-12-13 18:00:02
【问题描述】:

我们正面临 SVN 标记的问题。下图显示了我们的项目在 SVN 中是如何组织的。我们使用 Tortoise SVN 进行结帐,并使用 Visual SVN 作为我们的服务器。

这就是我们的项目在 SVN 中的组织方式

  • 分支 A(主要工作分支)从主干分支出来,因此驻留在 Branches 文件夹中。此分支中有不同的模块
  • B 分支(称为 RNS 的特定模块)稍后从分支 A 分支(这是为了新的增强功能)
  • 请注意,两个分支都不是主干。
  • B 分支开发过程中,引入了一些新文件,仅在 B 分支上
  • 没有对分支 A 内的 RNS 模块进行开发。

我们想标记我们最新工作项目的一个版本,即包含 RNS 模块的分支 B 的分支 A。如何实现?

这是我们从 SVN 签出最新工作区的方式

  • 我们检查了整个项目的 Branch A 版本。
  • 完成后,我们右键单击 RNS 模块,然后使用 SVN 切换选项将其更新为该模块的 Branch B(QUAL_RNS) 版本。
  • 这是我们最新的工作设置(黄色)。
  • 所以除了RNS模块之外的每个模块都属于Branch A。

我们尝试从父文件夹 –Folder-1(带有工作副本选项)创建此最新工作设置的标签/分支,但这只是创建了一个带有分支 A 的标签,不包括 RNS 模块的分支 B .

更新: 我在 Tortoise SVN 帮助菜单中看到了这个

  • 您也可以在没有工作副本的情况下创建分支或标签。为此,请打开存储库浏览器。您可以将文件夹拖到新位置。您必须在拖动时按住 Ctrl 键以创建副本,否则文件夹将被移动,而不是被复制。
  • 您也可以用鼠标右键拖动文件夹。释放鼠标按钮后,您可以从上下文菜单中选择是否要移动或复制文件夹。当然,要创建分支或标签,您必须复制文件夹,而不是移动它。

所以我用工作副本尝试了这个。我创建了一个新的标签文件夹并按住 Ctrl 键将我的整个项目拖到它上面。这似乎可行,但这是否会占用额外的空间(是否会创建额外的副本,因为复制整个工作区大约需要 5 分钟(470MB))还是会创建到存储库内文件的正确链接?

【问题讨论】:

  • 您是否将“分支 A”的工作副本中的目录“svn 切换”到完整的“分支 B”?如果你这样做,我认为这不是正确的方法。您必须使用 svn 外部:svnbook.red-bean.com/en/1.6/svn.advanced.externals.html
  • 感谢您的回复。是的,我检查了分支 A,然后为 RNS 模块进行 SVN 切换以将其更新到分支 B。我还没有尝试外部,因为我们使用 TortoiseSVN 作为 GUI。我会试试你的建议。

标签: svn tags tortoisesvn visualsvn-server


【解决方案1】:

你必须做普通或sparse工作副本,并按照http://svnbook.red-bean.com/en/1.6/svn.branchmerge.tags.html#svn.branchmerge.tags.mkcomplex中的说明用工作副本制作标签

使用 TortoiseSVN(或命令行),您可以对完整存储库进行标记(从根目录执行),但不推荐这样做,因为它会干扰在标准布局中中继的某些工具的行为。

【讨论】:

  • 非常感谢您的回复。我们在 Windows 机器上安装了 VisualSVN 服务器,并在 Windows 中完成所有签入,然后将我们的代码移动到 linux 框。我曾尝试通过您提到的链接从我的工作副本创建一个复杂的标签,但我在 Windows 上工作时使用了 TortoiseSVN exe 文件。 (例如:TortoiseProc.exe copy my-working-copy \ svn.example.com/repos/calc/tags/mytag \ -m "标记我现有的工作副本状态。")我不确定我是否做得对,或者 Windows 是否不支持。
  • 我认为你对 Subversion 缺乏一些基本的了解。您在不了解基础知识的情况下尝试使用图形客户端。请阅读svnbook.red-bean.com/en/1.6