【问题标题】:What does "tf workspaces" do?“tf 工作区”有什么作用?
【发布时间】:2015-08-29 07:27:06
【问题描述】:

我正在使用 tf.exe 来执行 TFS 源代码控制任务 - 映射文件夹、获取文件。当前文件夹映射在工作区中,我已经检查过了。以编程方式创建映射,然后调用 tf。

每当我在新机器上运行代码时,都会收到以下消息:

无法确定工作区。您可以通过运行 'tf workspaces /collection:TeamProjectCollectionUrl' 来纠正此问题。

如果我执行该命令,它会清除一切,从现在开始一切正常。但是,它究竟是做什么的,我如何使用 TFS API 来做同样的事情?

文档说它“更新有关运行 Visual Studio Team Foundation Server 的服务器上的用户名或计算机名更改的缓存信息”。我不明白 - 缓存在哪里?他们如何看待计算机名称更改?

调用 Workspace.Refresh() 或 Workspace.Update() 没有帮助。

【问题讨论】:

    标签: tfs


    【解决方案1】:

    每个(主要)客户端版本都保留工作​​区缓存,并且这些缓存不会在版本之间进行互操作。 (因为 Visual Studio/TFS 2015 工作区缓存的格式可能与 Visual Studio/TFS 2013 工作区缓存的格式不同,并且 Visual Studio 2013 可能无法以向前兼容的方式读取该新版本。)

    因此,如果您使用 Team Foundation Server 2013 SDK 创建新工作区,它将在服务器上创建工作区将该信息放入工作区缓存中,以便后续调用无需从服务器读取该信息。

    但如果您随后使用 Visual Studio 2015 中包含的 tf.exe,它将不会在缓存中找到该工作区。它需要连接到服务器以获取工作区列表 - 然后将其缓存以供将来使用,但同样位于 TFS 2015 缓存位置。

    从广义上讲,您需要使用与命令行界面相同版本的 SDK。其他替代方法是仅使用tf.exe 命令行界面创建工作区,而根本不使用 API。或者始终使用 API 而从不使用 tf.exe。仅当您混合和匹配客户端时才会出现此问题。

    【讨论】:

    • 不怕。 Tf.exe 说它是 v11,进程使用的 TFS API DLL 也是 v11。在所有 Visual Studio 组件中,机器只有 Team Explorer 2012。
    • @SevaAlekseyev 在这种情况下:您是否在调用之间指定了相同的 URL?您是否以不同的用户身份运行?您可以写入工作区缓存吗?每次客户端执行之前和之后的工作区缓存有什么区别? (工作区缓存位于%LOCALAPPDATA%\Microsoft\Team Foundation\<version>\Cache。)
    • 同一用户。我没有在 tf.exe 调用上指定 URL - 我希望它从当前文件夹中获取上下文。我会检查缓存...
    • 有趣的是,我已经删除并重新创建了工作区,现在 tf 把它捡起来了。哦,好吧...
    猜你喜欢
    • 2022-09-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-31
    • 2021-04-25
    • 2012-10-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多