我正在尝试编写一个非常轻量级的“构建”脚本,它基本上只能从TF获取一些文件(基于Changeset编号)。然后我将在SQLCMD中运行这些文件。
我正在使用它:
tf.exe get c:\tfs\ /version:c2681 /force /recursive
然而,这似乎得到了一切,而不仅仅是变更集#2681中的文件。我希望能够将它指向我的tfs工作区的根,给它一个变更集编号,并让它只更新那些少数特定文件。此外,它似乎是越来越老的版本(可能是在更改集#2681签入时的当前版本)?
有没有办法只获取那些特定文件,而无需在tf get itemspec中专门调用它们?
编辑:我实际上必须添加/ force选项才能完成任何操作。如果没有强制,它甚至不会从服务器中检索我在本地删除的文件,这肯定在变更集中。
感谢, 西尔维亚
答案 0 :(得分:4)
Jason和Richard的帖子中提到的所有内容都是正确的,但我想补充一点可能对你有帮助。 TFS团队提供了一组与VS分开的有用工具,称为“Team Foundation Power Tools”。其中一个Power Tools是一个名为tfpt.exe的附加命令行实用程序。 tfpt.exe包含一个“getcs”命令,相当于“get changeset”,这似乎正是你要找的。 p>
如果你有VS 2010,那么你可以下载工具here。如果你有一个旧版本,bing :)搜索应该可以帮助你找到正确的工具版本。如果您想了解有关getcs命令的更多信息,请查看Buck Hodges的帖子here。
答案 1 :(得分:2)
TFS服务器跟踪每个工作区包含 1 的内容。使用非TFS客户端命令(无论是tf.exe
,团队资源管理器还是其他客户端)在本地进行的任何更改都将导致TFS服务器视图与实际存在的视图之间存在差异。
各种客户端上的强制选项只会消除所有这些不一致的内容(有效地重置客户端上的内容以及服务器认为的内容)。
当您针对指定版本(无论是日期,变更集还是标签)执行获取时,您可以获得所有内容,包括该时间点,无论是否在此时未进行特别更改。所以得到
tf get /version:D2012-03-30
将在该日期或之前进行更改。
要仅获取变更集中包含的项目,您必须自己完成一些工作,使用命令获取变更集内容的列表并解析该变更集以执行正确的操作(变更集可包括多个只是更新和添加文件 2 )。
在我看来,如果你想在影响特定TFS文件夹的每个变更集上执行构建,那么最好不要使用TFS Build,这完全是为了做到这一点 - 避免重新发明轮子 - 并专注于构建部分(可以使用其他连续构建解决方案)。
1 这将随TFS11 本地工作区而改变。
2 例如。处理文件夹的重命名将需要一些非常重要的工作。
答案 2 :(得分:1)
该命令将获取给定变更集的所有源。默认情况下,它只会获取它认为在您的工作区和服务器之间不同的文件。但是,通过使用/ force选项,无论它认为您的工作区处于何种状态,您都会要求它获取所有内容(速度要慢得多,但确保您的工作区与服务器完全同步)。
所以只需删除/强制就可以达到你想要的效果。
修改强> 如上所述,tfs将从服务器获取认为不同的所有文件。如果从本地工作区手动删除文件,TFS将不会知道本地版本中缺少该文件,因此它不会认为需要更新该文件。有三种解决方案: