Version control &引用;tf get";从命令行开始';I don’我没有最新消息,用户界面有

Version control &引用;tf get";从命令行开始';I don’我没有最新消息,用户界面有,version-control,tfs,cmd,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. 使用命令行获取最新信息将报告所有文件都是最新的,而不是最新的!但是,当我在VisualStudio中使用TFS UI获得最新版本时,最新的代码实际上是下载的 在解决此问题之前,如果不打开v

我的语法正确吗

  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.
使用命令行获取最新信息将报告所有文件都是最新的,而不是最新的!但是,当我在VisualStudio中使用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

..\..\Core\Release\xx.xx.xx.xx

尝试使用
/force
参数。这将迫使所有的东西都被取回,这也许是你不想要的

或者,您也可以从CodePlex获取—如果您使用Visual Studio管理构建脚本,则它们具有包装这些调用的MSBuild任务,并与IntelliSense一起工作


您的
itemspec
在我看来很奇怪,但我没有任何具体的更正。我在使用命令行调用时显式地调用工作区,例如
tfget“$/[/]”/force/recursive
。否则,路径是相对于当前活动工作区映射的。

因此,我意识到了我的错误。这很简单

Command = 

    'tf get
       /version:T 
       /recursive
       "$(CoreLibPath)\Source\Libraries <<<-- Missing closing quote.
     '
问:使用本地文件系统的相对路径是否比使用SCS路径更不可靠?即$/Core/Release/xx.xx.xx.xx/Source/Libraries“

A:不,它的可靠性似乎没有下降

问:是不是我们有时使用devstudioui,而其他时候使用命令行会混淆TFS的命令行版本


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

另一个选项是用户没有访问项目集合的权限。在我的情况下,我可以看到目录,但没有权限下拉代码。我必须让TFS管理员将我添加为“开发者”“access.

假设itemspec正确,您的语法是正确的。您在UI中单击哪个文件夹以获取最新信息?你能简单地在CLC中使用itemspec吗?例如,
tf get$//递归的
。最糟糕的情况是,您可以使用
tf get$//recursive
获取整个工作区(而不是整个服务器,只是您映射的内容)的最新信息。您好,edward,我已经根据您的评论更新了我的问题。我认为您建议删除itemspec的本地路径,改用源代码管理路径名。不,使用本地路径的可靠性丝毫不低于服务器路径。这是MSBuild脚本的一部分吗?您是否将其作为TFS构建的一部分调用?生成定义的工作区映射中是否已存在$(CoreLibPath)?这正从msbuild脚本中使用,但还不是TFS生成的一部分。$(CoreLibPath)在用于跨项目文件链接的单独文件中定义,并导入到我的构建脚本中,以使用相对本地路径和文件名查找单独团队项目中包含的核心库。请查看问题中的更新。如果将验证
get
与UI调用以及测试命令行调用混合在一起,那么命令行调用可能确实会报告“所有文件都是最新的”,而不使用
force
参数。UI提供了重写必须在命令行上显式指定的行为的机会。您可能是对的。。。我讨厌认为解决这个问题的唯一方法是使用/all或/force标志,因为这会给构建增加很多时间,还会覆盖开发人员偷偷溜进他们自己的web和应用程序配置文件中的调整。@antwarpes:如果你混合使用UI和命令行中的get,是什么让你觉得自己不是最新的?@DaveE,我把路径切换到服务器scs路径,一切似乎都正常。我当前的目录是c:/Web/Release/x.x/x.x/>
tf-get/version:T。\Web\Libraries/recursive
to
tf-get/version:T$/Web/Release/x.x/Web/recursive
。您只是没有路径“$(CoreLibPath)\Source\Libraries/recursive”ContinueOnError=“false”。:)很严重,很好。
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.