我正在尝试编写一个非常轻量级的“构建”脚本,该脚本基本上只会从TF中获取一些文件(基于Changeset编号)。然后,我将在SQLCMD中运行这些文件。

我正在使用这个:

tf.exe get c:\tfs\  /version:c2681  /force /recursive

但是,这似乎可以得到一切,而不仅仅是变更集#2681中的文件。我希望能够将其指向我的tfs工作区的根目录,为其指定一个变更集编号,并使其仅更新这几个特定文件。另外,它似乎正在获得较旧的版本(也许在检入变更集#2681时是什么最新版本)?

有没有办法只获取那些特定文件,而无需在tf get itemspec中专门调用它们?

编辑:实际上,我不得不添加/force选项,以使其能够执行任何操作。没有力气,它似乎甚至没有从服务器中检索到我在本地删除的文件,这肯定在更改集中。

谢谢,
西尔维亚

最佳答案

TFS服务器跟踪每个工作空间包含的内容。使用非TFS客户端命令(无论是tf.exe,Team Explorer还是其他客户端)在本地进行的任何更改都将导致TFS服务器 View 与实际 View 之间的差异。

各个客户端上的force选项可以使所有内容消除这种不一致(有效地重置客户端上的内容和服务器认为的内容)。

当您针对指定的版本(日期,变更集或标签)执行获取操作时,无论该时间点是否已特别更改,您都会获得该时间点之前(包括该时间点)的所有内容。所以得到

tf get /version:D2012-03-30

将在该日期或该日期之前进行更改。

要仅获取变更集中包含的项目,您必须自己做一些工作,使用命令获取变更集内容的列表并解析其以执行正确的操作(变更集不仅可以包含更新和添加文件2)。

在我看来,如果您想在影响特定TFS文件夹的每个变更集上执行构建,那么最好还是使用TFS Build,因为这样做完全是–避免重新发明轮子–并专注于构建部分(其他连续构建解决方案可用)。

1这将随TFS11本地工作空间而改变。

2例如递给文件夹重命名将花费一些不平凡的工作。

关于tfs - Team Foundation Server-TF获取变更集编号,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9973670/

10-13 08:07