subversion (SVN)中的标签实际上是什么?SVN提供了哪些内置的标签工具?(与Clearcase相比)



什么是subversion (SVN)中的标签?Subversion真正提供了哪些内置特性来高效地使用它们?

我问这个问题是因为我想把某个版本的文件集合标记为标签。这将使版本命名更有意义。我也想准确地检索那些带有那个标签的文件,不多不少,在某个版本中从这些文件构建软件。

我相信,在ClearCase中,标签很可能是一个文件的属性。我得到了一个令人担忧的印象,标签并不是什么特别的东西,也不是Subversion的核心,相反,它们是一个任意的概念,只是一个文件夹,其中包含某个版本的文件副本,这是真的吗?如果是这样的话,它就没有ClearCase中的等同物那么有用了。

Subversion被宣传为有标签作为一个特性,当它看起来并没有一个真正的概念核心的工具,那么为什么说它是一个特性?在文献中似乎并没有广泛地提到它,但至少足以帮助我解决我的问题。

我得到了一个令人担忧的印象,标签并不是真正的什么特别的或核心的Subversion,而是一个任意的概念,只是一个文件夹的某个版本的文件副本,这是真的吗?如果是这样的话,它就没有在ClearCase中那么有用了。

这绝对正确。分支也一样。分支也只是一个用于创建分支的目录。

然而,仅仅因为这样做并不意味着它们没用。标记通常用于获取存储库在特定时刻的快照。例如,我想做一个构建,并标记该构建中使用的文件。稍后,当我们决定发行时,我想用我的发行号标记这些相同的文件。Subversion的标记方法和ClearCase中的一样好。

事实上,在Subversion中标记在很多方面都比在ClearCase中要好。在ClearCase中,我首先必须创建标签类型,然后将该标签类型应用于我想要标记的每个文件的版本。如果要标记10,000个文件,可能需要20分钟左右的时间。在Subversion中,标记是即时的。标记10,000个文件只需要不到一秒的时间。标记100,000或1,000,000个文件不会花费更多的时间。

在Subversion中,您可以通过仅仅列出tags目录的内容来获得所有标记的列表。这样做可以得到实际标记的列表。在ClearCase中,您只能做一个lstype -type lbtype,它会给您标签类型,但是这并不一定意味着这些标签实际上存在于任何文件中。

在Subversion中,标签和分支通常有不同的命名空间。在ClearCase中,它们共享相同的名称空间,因此您通常必须做一些事情来区分标签和标签。标准是标签是大写的,标签是小写的。

在Subversion中,您还可以看到标签何时被应用,以及由谁应用。在Subversion中,标记和分支具有不同的命名空间。而且,由于标记仅仅是目录,因此可以用于标记的灵活性是无限的:

  • 部分站点有tags目录,obsolete_tags专用目录。如果不再需要标记,则可以将其移动到废弃目录中。这意味着在标签目录中列出的标签只列出相关的标签。但是,开发者仍然可以看到过时的标签。
  • 一些站点使用不同的构建标签和发布标签目录。这样,如果你试图查看所有不同的发布标签的列表,你就不会看到成千上万的构建标签。
  • 一些网站针对不同的客户或版本类型有不同的目录。这样,你就可以谈论Acme的3.4版本和Vegco的3.4版本了。

ClearCase标签所具有的最大优势是ClearCase标签类型可以被锁定,因此如果没有标签类型的所有者解锁标签类型,它们就不能被移动或应用。但是,Subversion中有许多预提交钩子脚本可以或多或少地完成相同的工作。我有一个允许你创建一个标签,但不能修改它。

其他钩子脚本则更进一步。Subversion文件和目录可以设置属性。我见过允许创建该标记的人在目录上放置"lock-tag"属性以防止其被修改的钩子。删除"lock-tag"属性允许对标签进行修改。这允许Subversion标签模仿ClearCase中的行为。

在Subversion中,分支和标签对开发人员来说是非常可见的,并且比ClearCase中的对应部分更容易应用和使用。许多其他版本控制系统已经模仿了Subversion对标签和分支所做的事情,因为它使整个系统比ClearCase、CVS和更老的版本控制系统中的旧系统更可见,在旧系统中,标签和分支仅仅是附加在单个文件上的属性。

你是对的,标记对于Subversion来说并不是什么特殊的东西,只有对于开发人员或脚本来说,它们才能以某种特殊的方式处理。

实际上,我在这里看到的Subversion的特性是分支和标记是便宜的(常数时间)操作。作为硬链接的复制操作不是标签特性本身的意思。从这里开始:

Subversion没有用于分支或标记的特殊命令,而是使用所谓的"廉价复制品"。廉价的复制品类似于在Unix中的硬链接,这意味着,而不是做一个完整的拷贝在存储库中,创建了一个内部链接,指向特定的树/修订。因此分支和标签的创建非常快,并且几乎不占用存储库中的额外空间。

什么是subversion (SVN)中的标签?

特定位置下某个版本库(RO,按惯例)的副本

Subversion真正提供了哪些内置特性来高效地使用它们?

没有什么特别的-标签(在任何VCS中)只是一些存储库快照的标签,具有永久且易于使用的名称

我想把某个版本的文件集合标记为标签。这将使版本命名更有意义。我也想准确地检索那些带有那个标签的文件,不多不少,在某个版本中从这些文件构建软件。

就是

的标签

标签并不是什么特别的东西,也不是Subversion的核心,相反,它们是一个任意的概念,只是一个文件夹,其中包含某个版本的文件副本,这是真的吗?

是的,作为svn-repo的分支和所有其他物理部分

Subversion被宣传为有标签作为一个特性,当它看起来并没有一个真正的概念核心的工具,那么为什么说它是一个特性?

"廉价复制",适用于标签和分支,特性。很容易识别,当你必须分支|tag multiGB-repo

ClearCase,正如我在"每个开发人员应该知道的基本ClearCase概念是什么?"中提到的,有一个文件中心的方法(与其他VCS工具如SVN的存储库中心的方法相反)

当您在ClearCase (base ClearCase,而不是UCM)中放置一个标签时:

  • 你需要在每个你想要标记
  • 的文件上应用它
  • 你必须小心不要把标签从一个版本移到另一个版本。

UCM基线稍微好一点,因为它将在组件的所有文件上应用您的标签(没有办法忘记一个),并且您将无法移动该标签。

当您在SVN上创建标记时,您创建了一个由修订(库范围修订)引用的廉价代码副本,并且不能移动。
但是,您可以通过修改SVN"标签"的内容来创建新的版本,这有点问题。

最新更新