来自命令行的“tf get”并不是最新的,UI确实如此

时间:2012-03-06 19:06:41

标签: version-control tfs cmd

我的语法是否正确?

  tf get .\Web\project.root /recursive
  All files are up to date.


  tf get /version:T .\Web\project.root /recursive
  All files are up to date.

使用命令行获取最新信息将报告所有文件都不是最新的!但是,当我在Visual Studio中使用TFS UI获取最新信息时,最新代码确实会下载。

在这个问题得到解决之前,如果没有打开visual studio来获取最新信息,我的超级花哨的msbuild脚本将无法使用!

  <Target Name="GetLatestCoreLibraries" Condition="'$(GetLatest)' == 'true'">
    <Exec Command='tf get /version:T "$(CoreLibPath)\Source\Libraries /recursive' ContinueOnError="false" />
  </Target>

$(CoreLibPath)是传递给脚本的相对路径。有点像...

  <PropertyGroup>
    <CoreLibraryPath>..\..\Core\Release\xx.xx.xx.xx</CoreLibraryPath>
  </PropertyGroup

使用本地文件系统的相对路径是否比使用SCS路径更不可靠?即... $ / Core / Release / xx.xx.xx.xx / Source / Libraries“?

可能是因为我们有时使用Dev Studio UI,有时使用命令行会混淆TFS的命令行版本吗?

3 个答案:

答案 0 :(得分:3)

所以,我意识到自己的错误。这很简单。

Command = 

    'tf get
       /version:T 
       /recursive
       "$(CoreLibPath)\Source\Libraries <<<-- Missing closing quote.
     '

当您错过 tf get 上的结束双引号时,不会抛出任何错误。它只是报告“所有文件都是最新的。”

c:\Web\Release\x.x\x.x.xxxx>tf get /version:T "..\..\..\..\..\Core\Release\x.x\x.x.xxxx.xxxxx(xxxx xx xx - xxx)\Source\Libraries /recursive
All files are up to date.
  

问:使用本地文件系统的相对路径是否比使用SCS路径更不可靠? ie ... $ / Core / Release / xx.xx.xx.xx / Source / Libraries“?

答:不,它似乎不那么可靠。

  

问:可能是因为我们有时使用Dev Studio UI,有时使用命令行会混淆TFS的命令行版本吗?

答:不,这是用户混淆的情况,而不是SCS混淆。

答案 1 :(得分:2)

尝试使用/force参数。这将强制要检索所有内容,这可能是你不想要的。

或者你可以从CodePlex获得MSBuild Extension Pack - 如果你使用Visual Studio来管理你的构建脚本,他们有MSBuild任务来包装这些调用并使用IntelliSense。

itemspec对我来说很奇怪,但我没有任何具体的更正。我在使用命令行调用时明确调出工作区,例如tf get "$/<our product>/<branch>[/<project>]" /force /recursive。否则,路径相对于当前活动工作空间映射。

答案 2 :(得分:0)

另一个选择是用户无权访问项目集合。在我的情况下,我可以以某种方式看到目录,但没有权限下拉代码。我必须有一个TFS管理员添加我作为“开发人员”访问。