当TFPT无法确定工作区并刷新缓存无效时,是否有解决方法?

22

我在使用TFPT.exe时遇到了问题,即使按照互联网上的常规建议刷新了缓存的工作区设置,它仍无法正常工作。请参见下面的日志,了解我尝试过和看到的内容代表。有人能解释一下为什么“tf get”能够确定工作区,而“tfpt annotate”却失败了吗?

C:\tfsproj> set tfptcmd="C:\Program Files (x86)\Microsoft Team Foundation Server 2010 Power Tools\TFPT.exe"
C:\tfsproj> set tfcmd="C:\Program Files (x86)\Microsoft Visual Studio   10.0\Common7\IDE\TF.exe"
C:\tfsproj> %tfcmd% workspaces /s:http://tfs:8080/tfs/Apps
Collection: tfs\Apps
Workspace Owner          Computer Comment
--------- -------------- -------- ---------------------------------------------
DAVID     David_Zarlengo DAVID

C:\tfsproj> %tfcmd% get /preview
C:\tfsproj\src\:
Replacing Readme.txt

C:\tfsproj> %tfptcmd% annotate src\Readme.txt
Unable to determine the workspace

在Visual Studio 2010中编辑工作区时,"Working folders"(工作文件夹)表格中包含3行,其中一行是"Active, $/Foo, C:\tfsproj",因此我认为该文件夹已正确映射。

同时发布在Team Foundation Server - Power Tools & Add-ons

6个回答

33

我从MSDN论坛上的一篇类似的讨论中得到了这个建议:

你需要确保你从一个已经映射到本地的文件夹中运行命令,你可以运行tf workfold来查看当前文件夹是否已经被映射(例如,在你的情况下请从C:\Temp运行命令)。


1
我遵循了上述所有建议,这是必要的...使我无法执行tfpt任务的最后两个关键点是:1)我必须在工作区的一个文件夹中,而不仅仅是工作区的“根”目录;操作仍然会对所有货架集的文件夹进行操作,2)Shelveset在我的源工作文件夹中被取消挂起,我必须通过执行撤消(或使用相同名称保存到Shelveset以覆盖原始内容,然后取消选中保留Shelveset以清除工作文件夹),无论哪种方式都可以解决问题。 - SnapJag

18

对于使用vs2017的用户:尝试启动vs2015(而不是2017),确保在vs2015中连接到TFS服务器,然后tfpt将正常工作。

但请注意:听起来tf powertools命令正在集成到新的tfs工具中,因此在2017年使用tfpt已经没有意义了。有关更多信息和有用链接,请参阅Daniel Mann在此处的答案:tfpt.exe on Visual Studio 2017


很好的建议。我一直在尝试从VS Code中让TFS 2010工作,唯一能做的就是安装VS2015、TFS Power Tools 2015,最后在VS2015中连接到我的TFS。现在一切都正常了! - Phil
这对我也起作用了,一旦我将我的VS2015连接到TFS连接,它就开始工作了。 - Payam
谢谢,我已经尝试过其他方法了,但是一看到这个就豁然开朗了。我只是为了使用Power Tools而专门安装了VS 2015,这让我感觉很不幸,因为他们知道像迁移这样的关键功能还没有实现,却没有发布任何2017版本的Power Tools。我想知道他们是否在VS 2019中解决了这个问题。 - TheXenocide

15
我曾经遇到过同样的错误,问题在于我从命令行运行tfpt时,它会解析为Power Tools的2008版本,而不是2010版本。
使用无参数运行tfpt,在其帮助中输出时,它会告诉你哪个版本。

2
谢谢!这解决了我的问题。只需在cmd行中指定您需要的2010版本即可:“C:\ Program Files(x86)\ Microsoft Team Foundation Server 2010 Power Tools \ tfpt.exe”。请确保验证您真正安装到哪个程序目录中。 - Osiris
这让我找到了解决方案。在vs2017中无法工作。我所要做的就是启动vs2015,然后tfpt就可以正常工作了。 - JohnnyFun

5
经过重新审视,发现'C:\tfsproj'是一个目录符号链接,指向'C:\some\nested\path'。从嵌套路径运行TFPT命令可以正常工作。
有趣的是,TFS工作区被映射到嵌套路径,因此令人惊讶的是TF命令(例如tf get /preview)能够从别名路径正确地工作。
我怀疑TFPT在确定工作区时没有正确遵循NTFS目录符号链接。

2
只要您在工作目录内,tfpt annotate 应该可以正常工作。如果您收到“无法确定工作区”的消息,则可能是缓存问题。
如果像您说的那样运行了 tf workspaces /s:serverURL,但仍然无法解决问题,我建议尝试创建一个新的工作区并在其中进行测试。如果这样可以正常工作,那么显然工作区存在问题,我会删除它并使用新的工作区。如果两者都失败,则可能存在更大的问题,但这就是我的处理方法。

1
在我的情况下,我是如何遇到这个问题(错误信息“无法确定工作区”)以及如何解决它的。
到达:
我有一些代码。开发从我所在的分支(让我们称之为Branch1)移动到Branch2。我必须继续在Branch2下进行。我将更改搁置,将我的开发文件夹重新映射到Branch2,打开Developer Command Prompt for VS2012并运行以下命令
tfpt unshelve /migrate /source:"$/path/Branch1" /target:"$/path/Branch2" "Shelveset Name"
在这里,我收到了“无法...”消息
解决方案:
在我的情况下,问题是当我打开命令提示符时,它的工作目录是c:\program files\...\...Visual Studio 11...。当我将工作目录更改为分支本身的目录:c:\MyBranchFolder时,它可以工作(迁移货架)。

1
谢谢,这对我的情况是一个解决方案!需要将VS2015和工作目录更改为源分支路径。 - Vitaly Leskiv

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接