如何删除 TFS 工作区映射?

我在一个团队项目中的 tfs 中有一个项目,然后我们将该项目移动到另一个团队项目中的不同位置。

我已经将 Jenkins 配置为连接到团队项目并构建我的解决方案,但是当我更改设置以连接到新的 tfs 团队项目时,它会给我以下错误:

[workspace] $ "C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE\tf.exe" workspace -new Hudson-ProjectName1-Build-MASTER;domain1\username1 -noprompt -server:http://domain-eg.net:8080/tfs/newteamproject ********
The path D:\jenkins\jobs\ProjectName1-Build\workspace is already mapped in workspace Hudson-ProjectName1-Build-MASTER [http://domain-eg.net:8080/tfs/oldteamproject].

因此,上面显示有一个现有的工作区,所以我运行下面的命令来删除它

tf workspace -delete Hudson-ProjectName1-Build-MASTER;domain1\username1 -noprompt -server:http://domain-eg.net:8080/tfs/oldteamproject

它提示工作区已被删除,但我仍然得到相同的错误。

我还通过运行以下命令检查映射是否已被删除:

tf workspace -server:http://domain-eg.net:8080/tfs/oldteamproject Hudson-ProjectName1-Build-MASTER

但是它说工作空间并不像预期的那样存在。

因此,我认为它可能正在某个地方缓存它,并运行以下命令:

tf workspaces /remove:* /collection:http://domain-eg.net:8080/tfs/oldteamproject

它说“缓存中没有工作区与服务器 http://domain-eg.net:8080/tfs/oldteamproject匹配 *”

所以我猜它根本没缓存。

那么是什么导致了这个错误,以及如何解决它呢?

260857 次浏览

按照以下步骤从 TFS 中删除映射:

  1. 打开 team explorer
  2. Source Control
  3. 右键点击你的 project
  4. 点击 Remove Mapping

来自 VS:

  1. 开放团队探索者
  2. 单击“源代码管理资源管理器”
  3. 在工具窗口的导航栏中有一个标签为“工作区”的下拉列表。
  4. 扩展它,点击“ Workspace...”选项(是的,有点不直观)
  5. “管理工作区”窗口出现。单击编辑,您可以添加/删除/编辑您的工作区

source control explorer

从另一台机器上的 VS

您不需要 VS 与登记在同一台机器上,因为您可以编辑远程登记!在对话框中,当你按下“工作空间...”项目,有一个复选框声明“显示远程工作空间”-只要勾选它,你会得到一个列表,所有的征兵:

show remote workspaces

从命令行

从开发人员命令提示符中调用“ tf 工作区”。它将直接打开“管理工作区”!

我也遇到了同样的问题,我可以通过手动删除 TFS 缓存中的所有文件来解决这个问题,位于这里:

%LocalAppData%\Microsoft\Team Foundation\3.0\Cache

4.05.0等。

我使用/newowner 命令删除了这个映射,如下所示:

如何重新获得对 TeamFoundationServer 工作区的访问?

该命令打开了一个 Edit Workspace 窗口,我在其中删除了映射。

这个错误是真实的。您可能已经在不同的计算机上创建了具有相同名称的工作区。现在您可能已经更改了具有不同机器名称的机器。

因此,这里有一个解决办法,肯定会奏效。

  1. 打开“探险队”
  2. 进入“源代码控制”
  3. 进入工作区下拉列表
  4. 点击“工作区...”
  5. 将出现一个弹出窗口
  6. 点击“显示远程工作区”
  7. 现在删除冲突的工作区,您就可以继续您的工作了。

更新2019-01-23

如果在 tf workspace命令中使用了正确的用户名(wkspcOwnerDomain\wkspcOwnerUsername)之后仍然重复出现以下错误,例如,

tf workspace "wkspaceEg;wkspcOwnerDomain\wkspcOwnerUsername" /collection:http://tfs.example.com:8080/tfs/collectionEg /login:TFSUsername,TFSPassword

那么 tf workfold命令可以帮助修复它。参见 这个问题

如果即使这样也不起作用,而且您不能/不愿意使用 TFS 助手,那么可以进行下面这个有风险的最后选择。


我用的是 TFS 2012。我尝试了在线建议的所有方法: 删除缓存文件夹,使用工作区下拉菜单,tf 工作区/删除: * ,清除控制面板、 IE 等的凭证。

什么都没用,我想我的工作空间不知怎么被破坏了。最后,我转到 TFS 数据库并运行以下查询。成功了!当然还有 在破坏数据库时要非常小心,备份等等。

该数据库称为 Tfs_<<your_TFS_collection_name>>。忽略 Tfs_Configuration MSSQL 数据库。我不确定,但如果你没有一个 Tfs_<<your_TFS_collection_name>>数据库,设置可能在 Tfs_DefaultCollection数据库。映射存储在 tbl_WorkingFolder.LocalItem中。

/*Find correct workspace*/
SELECT WorkspaceId, *
FROM tbl_Workspace
ORDER BY WorkspaceName


/*View the existing mapping*/
SELECT LocalItem, *
FROM tbl_WorkingFolder
WHERE WorkspaceId = <<WorkspaceId from above>>


/*Update mapping*/
UPDATE tbl_WorkingFolder
SET LocalItem = 'D:\Legacy.00\TFS\Source\Workspaces\teamProjEg' WHERE
/*LocalItem = NULL might work too but I haven't tried it*/
WorkspaceId = <<WorkspaceId from above>>

这里的所有答案都没有删除我的工作空间。但是这里有一个可能对你有用的解决方案。

  1. 打开 VisualStudio 命令提示符
  2. 先关闭 VisualStudio,否则删除命令可能无法删除工作区
  3. 列出工作区命令-> tf/? 以查找 TFS 版本中可用的命令。
  4. 列出工作区-> tf 工作区
  5. 删除工作区-> tf 工作区 YourWorkspace/Delete

您不必删除整个 Cache 文件夹。您将丢失所有设置/首选项 工作区映射存储在一个名为:

Config 位于用户本地设置/应用程序数据目录下。 位于这里的窗口7:

% LocalAppData% MicrosoftTeamFoundationx.0缓存易失性

其中 x = 3.0,4.0,5.0,6.0等。

在这个文件夹中,你可以找到名为 guid 的文件夹,打开每个文件夹,手动编辑前面提到的文件,从本地文件夹中删除到 TFS 服务器的工作空间映射(目录路径将出现在 mappedpath 属性中)(这已经不再使用了)。

您还可以通过简单地编辑。Sln 文件,并删除 tfs 绑定的 GlobalSection 元素。

最后删除了所有的工作区,从头开始。

我被提示通过 Visual Studio 登录到我们的 TFS 服务器,所以我使用了我的 SU 帐户,这是访问服务器所必需的。这导致了一些问题,我最终映射到一个不同的文件夹,没有意识到我刚刚复制了我所有的东西。在某个时候,Visual Studio 恢复到我的常规用户,我“丢失”了挂起的更改,并注意到新的挂起的更改被放置在我的旧映射中。

当我尝试重新映射到新的位置(SU 帐户被链接到) ,试图恢复我未决的变化,它会告诉我它已经映射到 SU,我不能这样做,但没有办法删除地图!显示远程工作区,通过命令行删除所有工作区,等等,没有显示任何东西。然后我想“如果它实际上链接到 SU 用户帐户 在我的电脑上,而不是域,那会怎样?”我以本地 SU 的身份登录,果然,有一个为该用户设置的工作区。我删除了映射,并且能够返回到我的常规用户和重新映射没有问题。

这个故事的寓意是,也许另一个用户登录在同一台计算机上,这对于当前登录的用户是不可见的,因此您不能删除甚至看到映射。

谢谢你的帮助!

找到问题工作区 SELECT * FROM tbl _ Workspace WHERE WorkspaceName,如“% xxxxx%”

找到所需的工作空间 SELECT * FROM tbl _ Workspace 工作空间的位置,例如“% zzzzz%”

选择 Edit Top 200 tbl _ WorkingFolder,然后查找问题映射 SELECT * FROM tbl _ WorkingFolder WHERE WorkspaceId = < em > Problem WorkspaceId FROM above

将 WorkspaceId 更改为所需的 WorkspaceId

最后转到项目资源管理器并选择项目上的“移除映射”

修改 VB6 MSSCCPRJ.SCC 以匹配所需的工作区

请按照以下步骤:

Ctrl + Run

收到

%LocalAppData%\Microsoft\Team Foundation

你会得到不同版本的 TFS,例如 enter image description here

点击每个文件夹,你会得到

enter image description here

现在删除这些文件夹中的所有数据。

重新打开视觉工作室。

谢谢。

首先下载并在系统中安装 TeamExplorer 插件,然后转到源代码管理资源管理器。在导航窗格中找到 Workspace 字段并单击 Workspace 选项。 单击 Workspace 选项后,您将看到映射的所有工作区。单击删除按钮并删除所需工作区的映射。

运行 tf workspaces查看当前工作区映射。输出如下:

enter image description here

然后运行 tf workspace /delete "{workspace};{user}

使用上面的输出,删除工作区 bi:

tf workspace /delete bi;James Wierzba

如果上面提到的线索对您没有帮助,那么可以下载 TeamFoundationSidekick 并使用它删除工作区。

文件-> 源代码管理-> 高级-> 工作区-> 选择管理工作区中的工作区并单击“编辑”,然后您可以更改本地文件夹。

以下是从 TFS 中移除项目映射的步骤:

(1)点击查看按钮。

(2)公开组探险家

(3)点击源代码管理

(4)右键点击你的项目/目录

(5)点击删除映射

(6)最后删除项目表本地目录。

这里的所有答案似乎都是部分答案,并不是在所有情况下都有效。我认为这个答案在所有情况下都会起作用,假设您有适当的权限。

  1. 打开开发人员命令提示符。在我的例子中,我已经用 VS2019的开发人员命令提示符测试过了。
  2. 键入以下命令: tf workspaces

注意,结果可以列出具有相同结构的两个表。如果您只看到一个表,那么其他答案中的一些假设可能对您有用。但是,如果您看到两个或多个表,那么 收集字符串就很重要!对于我们的示例,我们假设您有两个集合(两个集合与四个集合没有什么不同,一个集合比另一个集合更加单调乏味) :

https://dev.azure.com/foohttps://bar.visualstudio.com/

幸运的话,你会知道你想和这两个人中的哪一个合作。但是,如果需要遍历所有这些集合,那么只需要一次执行一个集合。这里的每个“集合”都与 Azure DevOps 中的“组织”相同(我认为)。

如果您没有使用这个 Collection 细节,那么您可能会看到一个错误消息:

无法确定源代码管理服务器。

  1. 接下来,为要使用的集合键入以下命令:

tf workspaces /computer:* /owner:* /collection:https://dev.azure.com/foo

这会让你对你正在处理的事情有一个更完整的了解。如果您有多个 MSA 和 Org 帐户从同一台计算机进入这个回购,这将变得特别令人讨厌。实际上,您可能有多个看似相同的条目。如果您试图根据您当前知道的内容删除它们,那么它可能无法工作。但我们可以得到更多信息。

  1. 接下来,我们将运行相同的命令,但是将 /format:xml附加到命令的末尾:

tf workspaces /computer:* /owner:* /collection:https://dev.azure.com/foo /format:xml

现在,您可以看到一组带有一些附加属性的 XML。我们可能最关心的是所有者别名。这就是您现在需要查看和删除这些工作区的缺失信息。如果没有这些额外的信息,就很容易碰壁,并被一个错误消息所困扰:

指定一个工作区。

  1. 现在我们需要的信息都有了。给定额外的 OwernAliases条目,选择要删除的唯一条目(如果不止一个,则重复) ,并使用以下命令(列出了几个示例) :

    • Tf 工作区/删除/收集: https://dev.azure.com/foo “ MyWorkspaceName; Windows Live ID John. Doe@hotmail.com”
    • Tf 工作区/删除/收集: https://dev.azure.com/foo “ MyWorkspaceName; John Doe”
    • Tf 工作区 /删除/收集 https://dev.azure.com/foo “ MyWorkspaceName; 2C3E8474-A39C-4785-8794-DC72F09981E6 John. Doe@Example.com”

GUID 标识 AAD 目录,引号用于处理别名中的任何空格。“ MyWorkspaceName”来自您之前列出工作区的查询。


如果没有这种非常彻底的方法,那么这个问题的其他所有答案都有可能对您来说都是失败的。虽然其中一些工作将清除本地工作区,但它们不会清除服务器工作区,因为您仍然可能与服务器工作区发生冲突。此外,如果您以前使用过不同的帐户,事情可能会变得棘手,比如如果您从 MSA 转换到 AAD 帐户。如果你有一个 MSA 帐户 还有多个 AAD 帐户,并且所有帐户的电子邮件地址都是从同一个工作站使用的,那么事情就会变得非常棘手。然后,如果其中多个都使用工作区的默认名称: 您的计算机的主机名,那么情况就会变得非常糟糕。在我的例子中,我有四个工作区,它们的工作区名称、所有者名称和计算机名称都相同(也就是说,没有 XML 格式化的第一个查询有4个相同的记录!).


我不知道是否有比这更图形化的方式来管理这些。我已经找过了,还没有找到比这更好的方法。

团队资源管理器 > 源代码管理资源管理器 >

TFS Remove MAPPING

如果映射是正确的,那么您可以撤消/签入您的更改,如果您真的想更改文件夹名称。

或者,如果要删除映射,则在 VisualStudio 中转到 文件-> 源代码管理-> 高级-> 工作区-> 编辑

现在可以单击适当的路径并删除映射。