不知何故,我最终得到了一个"鬼"工作区。它不会出现在管理工作区下的Visual Studio中。当我连接到VS Team Services和开源控制资源管理器时,它会弹出一个与TF14061的错误对话框("工作区不存在")
当我尝试从sidekicks中删除它时,它也会导致TF14061:
tf vc workspace "MYCOMPUTER;My Name" /delete /collection:https://me.visualstudio.com/defaultcollection
TF14061: The workspace MYCOMPUTER;My Name does not exist.
我在计算机上搜索搁置集时可以看到工作区:
tf workspaces /computer:MYCOMPUTER /owner:* /collection:https://me.visualstudio.com/defaultcollection
结果:
=======================================================================================================================
Workspace : MYCOMPUTER
Owner : My Name
Computer : MYCOMPUTER
Comment :
Collection : https://me.visualstudio.com/defaultcollection
Permissions: Private
Location : Server
File Time : Current
Working folders:
$/: C:\local
只需按工作区名称或所有者名称搜索工作区,就不会返回工作区。
我正在尝试创建一个新的工作区并将其映射到同一个文件夹,但我收到的错误是该文件夹已经映射到另一个工作区。
如何删除此幻像工作区?
编辑:其他信息 即使所有者是相同的,这些重复工作空间的安全令牌似乎也是不同的。一个匹配我的Azure AD帐户,另一个匹配我的Microsoft帐户。这很奇怪,因为我的Microsoft帐户没有此服务器的权限。
注意:我使用的是Visual Studio Team Services。
答案 0 :(得分:2)
Add-Type -AssemblyName 'Microsoft.TeamFoundation.Client, Version=12.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' Add-Type -AssemblyName 'Microsoft.TeamFoundation.VersionControl.Client, Version=12.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'
$uri = 'https://me.visualstudio.com/defaultcollection' $tfs = [Microsoft.TeamFoundation.Client.TfsTeamProjectCollectionFactory]::GetTeamProjectCollection($uri) $vcs = $tfs.GetService([Microsoft.TeamFoundation.VersionControl.Client.VersionControlServer])
$vcs.QueryWorkspaces('WorkspaceName', $null, $null) | % QualifiedName
您可以查看QueryWorkspaces online help。如果对QueryWorkspaces()
的调用没有返回任何内容,如果您只传递计算机名称,则可能需要以这种方式发出:
Invoke-Method -InputObject $vcs -MethodName 'QueryWorkspaces' -Arguments $null, $null, 'ComputerName' | % QualifiedName
似乎有人认为$null
无法直接从PowerShell中传递。我之前遇到过这个问题,post帮了我(但现在似乎已经退休了)。
答案 1 :(得分:1)
这里发生的事情是你有两个具有相同显示名称的身份。其中一个身份是使用您的Microsoft帐户(MSA)创建的旧身份。新标识是您的Azure AD帐户(AAD)。在内部,他们有不同的GUID。当您使用显示的所有者名称运行tf命令workspace / delete命令时,不明确的显示名称将解析为当前标识(AAD),而不是实际拥有该工作区的旧标识(MSA)。
我无法确定,但如果您确定可以安全删除任何所有者的所有工作区,则可以运行tf工作区/删除并为所有者使用通配符工作区名称(要非常小心,确保不要删除其他人的工作区)。
我建议您尝试Attrice Sidekick for TFS并使用管理工作区功能查看是否可以删除旧身份下的工作区。如果它有效,这将是最安全和最简单的路线。
答案 2 :(得分:1)
您可以使用 tf工作区命令来获取所有工作区的详细XML信息,包括所有者的唯一ID和所有者别名的用户名:
tf workspaces /owner:* /format:xml
示例输出:
<Workspace computer="computer" name="wrkspacename" ownerdisp="Some Name"
ownerid="S-1-5-00-0000000000-0000000000-000000000-0000"
ownertype="System.Security.Principal.WindowsIdentity"
owner="12345678-90ab-cdef-1234-567890abcdef"
owneruniq="12345678-90ab-cdef-1234-567890abcdef">
<Comment />
<Folders>
<WorkingFolder local="C:\Folder" item="$/Folder" />
</Folders>
<LastAccessDate>2019-01-01T01:02:03.456+00:00</LastAccessDate>
<OwnerAliases>
<string>SERVER\Name</string>
<string>Name</string>
<string>Some Name</string>
</OwnerAliases>
</Workspace>
然后您可以尝试使用某些 OwnerAliases 作为所有者删除工作区,或直接使用 owneruniq :
tf workspace /delete wrkspacename;12345678-90ab-cdef-1234-567890abcdef