2012-03-30 95 views
8

一个blog状态理解标签限制

标签都配备了大警告,虽然 - 标签本身并不 版本控制,这意味着没有办法跟踪或审计 历史活动的标签上。另外,如果文件被删除,标签不会保留 版本的副本,所以如果文件被删除,任何依赖该文件版本的标签基本上都会被清理。

这并非我唯一读过有关TFS标签的信息。缺乏足够清晰的历史。第二部分“标签不保留版本的副本......”不清楚。实际上,我创建了一个测试项目>标记为>删除了一个文件>执行了一个按标签获取并且文件返回。那么这是指什么?最近TFS中的标签功能是否已更改?

我意识到文件删除并不会真正删除历史记录,那是什么原因?换句话说,如果我跑

TF消灭 “$/MyTeamProject /项目/ FileName.cs”

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

回答

2

当我们将一个标签应用到某个时间点的源代码控制版本时。直观地说,因为我们最初在某个时间点创建了源代码控制的快照,所以可以假设快照代表某个时间点的源代码。

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

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

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

最后,我们转到BetaBoogerBear。我们可以选择返回,并及时获取代表最佳版本的旧产品的标签。

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

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

1

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

不管是否受版本控制,它提醒你的是,有人可以通过包括或排除标签中的文件或更改标签中包含的文件版本来编辑标签。这些标签定义的变化将不会有历史记录。

0

据我所知,TFS中的标签基本上是一套/集合变更集

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

由于标签仅由其名称标识,因此使用新标签覆盖标签并破坏旧信息也很容易。该命令的参数/child可以在某种程度上更改此行为:使用/child:merge将保留之前与新记录一起记录的变更集,/child:replace将用新变更集替换旧变更集。在上面的示例中,这些替代方法都没有任何区别,因为按标签获取仍然会检索最高的变更集。