了解标签限制

时间:2012-03-30 17:25:02

标签: tfs tfs2010

A blog个州

  

虽然标签有一个很大的警告 - 标签本身并非如此   版本控制,意味着无法跟踪或审核   标签上的活动历史。另外,标签不保留副本   文件删除时的版本,所以如果文件被删除,任何   依赖于该文件版本的标签基本上是软管。

这不是我读过有关TFS标签的类似信息的唯一地方。缺乏历史已经足够清楚了。第二部分“标签不保留版本的副本......”尚不清楚。事实上,我创建了一个测试项目>标记为>删除了一个文件>执行了Get by Label,文件又回来了。那指的是什么? TFS中的标签功能是否在最近更改了?

我意识到文件删除实际上并没有删除历史记录,原因是什么?换句话说,如果我运行

  

销毁“$ / MyTeamProject / Project / FileName.cs”

删除文件意味着什么?如果是这样,这似乎是一个特殊的情况甚至考虑。我的意思是,它是故意不可恢复的历史删除。在这种情况下,变更集对标签不会有任何改进。

3 个答案:

答案 0 :(得分:2)

当我们应用标签时,我们会在某个时间点对源控件的版本执行此操作。直觉上,因为我们最初在某个时间点创建了源控件的快照,所以可以假设快照表示某个时间点的源代码。

这是不正确的。可以在创建后编辑标签。

从概念上讲,标签定义了产品和产品的错误修复(source)。一个现实世界的例子可能有所帮假设我们有一款名为AlphaBoogerBear的产品。 AlphaBoogerBear是一个产品,而不是一个版本(想想预发布的Windows名称)。 AlphaBoogerBear可以制作成Label,AlphaBoogerBearLabel。我们执行AlphaBoogerBear的发布。有一些错误。我们修复它们。

现在,我们返回并编辑AlphaBoogerBearLabel以包含错误修正。标签不再代表某个时间点的快照。相反,它代表了AlphaBoogerBear最稳定的版本。

最后,我们转到BetaBoogerBear。我们可以选择返回并抓住一个标签,该标签代表旧产品的最佳版本。

在我看来,如果需要源控件版本的快照,最好分支。如果需要一个代表产品版本的可编辑快照,那么Label很有用。尽管如此,这似乎是信任和便利的难以平衡。

就作者的意图而言,我实在无法肯定。他可以说可以从标签中删除项目,因此当您通过标签获取时,该项目将会消失。虽然,该项目仍然存储在TFS历史记录中,所以尽管这是一个令人困惑的情况,但并非所有项目都会丢失。

答案 1 :(得分:1)

我不确定关于标签受文件删除影响的句子是什么意思。但你说得对,常规文件删除不会影响标签,但会破坏。

关于不受版本控制的注意事项是,有人可以通过包含或排除标签中的文件或更改标签中包含的文件版本来编辑标签。并且标签定义不会有这些变化的历史。

答案 2 :(得分:0)

据我了解,TFS中的标签基本上是变更集的集合/集合。

假设您标记了一个包含两个文件的目录。然后,标签将包含三个变更集:一个用于目录,一个用于每个文件。在TFS中删除其中一个文件将为目录生成一个新的变更集,因此在此阶段执行Get by Label会使删除的文件“返回”,因为它包含删除前的变更集。 销毁文件会将其从已出现的任何变更集记录中删除,从而也会破坏标签中的信息。

由于标签仅由其名称标识,因此使用新标签覆盖标签也很容易,从而破坏旧信息。此命令的/child参数可以稍微改变此行为:使用/child:merge将保留先前记录的变更集以及新变更集/child:replace将旧变更集与新变更集交换。在上面的示例中,这些替代方案都没有任何区别,因为Get by Label仍会检索最高的变更集。