SVN中的标签和分支之间有什么区别?

我正在与SVN分支机构和TRUNK多年,但从来没有与标签

有人可以build议这些之间的主要区别是什么? 什么是标签的主要目的?

这是从http://svnbook.red-bean.com/en/1.5/svn.branchmerge.tags.html

但是等一下:是不是这个标签创build过程和我们用来创build分支的过程一样? 是的,事实上是这样。 在Subversion中,标签和分支之间没有区别。 两者都是通过复制创build的普通目录。 就像分支一样, 被复制的目录是“标签”的唯一原因是因为人们已经决定以这种方式来对待 :只要没有人向目录提交,它就永远是一个快照。 如果人们开始承诺,它就成了一个分支。

从技术上来说,它和分支一样,但在概念上我们把它当作快照。 在我的svn版本库中,我知道分支将包含可能已经或可能未被合并到主干中的大特性,但是我仅使用标签来标记发布版本。

唯一的区别就是你使用的是什么,它们是一样的。

一个分支是你可以开发与主干不同版本的代码的工作。

标签是用来“标记”发行版的。 假设我只在干线上工作。 当我将V1发送给客户时,我为其创build了一个“V1标签”。 然后我在V2上工作。 当客户遇到V1问题时,我可以检查标签并开始debugging与客户完全相同的版本。 你可以检查标签,但你不应该 。 如果你需要做一个V1.1的版本,你可以使用与V1标签相同的版本来创build一个分支,然后检查修改的内容,并在V1.1发布时进行标记。

“主干”和“分支”通常用于活跃和当前的发展。 这是用户提交/签出文件的地方。 这通常是很多活动发生的地方。

另一方面,“标签”通常用于创build快照和开发的里程碑。 对于你的团队来说,在标签文件夹上进行任何提交/检出并不是很理想。

以下是标签适用性的两个例子:

  1. 分支存档 – 当版本或function分支完成或完全报废时,通常会删除分支,这将有效地将其隐藏在HEAD版本中。 有些人通常不会删除这些文件夹进行归档,因为他们希望看到他们的所有版本/项目。 这虽然可以导致分支树很难导航。 这就是为什么最好只保留在分支文件夹的HEAD表中的活动和正在运行的项目版本和function。 您可以创build这些存档分支的最后修订版本的标签副本,以便您仍然可以在HEAD修订版上看到它们。 这样,您可以在分支归档之前对分支的最后一个版本进行快照,并将分支树中的内容保持整洁。

  2. 保持里程碑 – 项目通常有许多发展阶段。 开发,UT,质量保证,QA前,QA后,BAT,后BAT,PROD,PROD,PROD,PROD。 您可以使用标签在每个重要阶段为您的开发做一个快照,而不是依赖版本号,date或评论。

标签对组织事物可能有很大的帮助,但有时也可能是混乱的。 命名标签文件夹有一个标准的命名约定是很重要的。

标签和分支在技术上是等同的。 不同之处在于它们通常如何使用。

您可以使用分支来创build可编辑的代码副本,以便您可以同时开发一个稳定的工作副本。

您可以使用标签来制作代码的只读副本,以便以后可以方便地获取该代码。 这是如何用于每日构build。 每个每日构build只是创build一个名称包含该内部版本号的标签。 一旦你需要得到很久以前构build的源代码(例如,重现一个bug),你只需从该标记中导出它们。