无法获取 TFS 内的所有标签

Can't get all labels inside TFS

当我尝试 运行 命令时

TF labels /owner:*

我收到错误

Data is Null.  This method or property cannot be called on Null Values.

在这一点上,我假设这是一个类似于我过去经历过的数据库损坏 - “TF14045: The identity <guid> is not a Recognized identity” with TFS 2012 update 4 after upgrade from 2010

我可以从其他集合获取标签并从特定用户获取标签。

我要开一张事故单,但我想在这里查看是否有人有可能的解决方案。

干杯

所以问题最终是 TFS 标签关联到不再存在的用户帐户。

Microsoft 代表在下面创建了以下脚本。它将错误标签分配给现有帐户。

/* Script to reassign TFVC artifact ownership to an existing identity
 * The 16 was selected from the healthy identities as 
 * determined by this script 
   SELECT  *
   FROM    tbl_VCIdentityMap vcim
   LEFT JOIN tbl_Identity i
   ON      i.PartitionId = vcim.PartitionId
           AND i.Id = vcim.TeamFoundationId
   WHERE   i.PartitionId IS NOT NULL
   ORDER BY IdentityId
 */

DECLARE @ownerId INT = 844

-- tbl_Labels
UPDATE  l
SET     l.OwnerId = @ownerId
FROM    tbl_Label l
LEFT JOIN tbl_VCIdentityMap vcim
ON      vcim.PartitionId = l.PartitionId
        AND vcim.IdentityId = l.OwnerId
WHERE   l.PartitionId = 1
        AND vcim.IdentityId IS NULL

-- tbl_Workspace
UPDATE  w
SET     w.OwnerId = @ownerId
FROM    tbl_Workspace w
LEFT JOIN tbl_VCIdentityMap vcim
ON      vcim.PartitionId = w.PartitionId
        AND vcim.IdentityId = w.OwnerId
WHERE   w.PartitionId = 1
        AND vcim.IdentityId IS NULL

-- tbl_Branch
UPDATE  b
SET     b.OwnerId = @ownerId
FROM    tbl_Branch b
LEFT JOIN tbl_VCIdentityMap vcim
ON      vcim.PartitionId = b.PartitionId
        AND vcim.IdentityId = b.OwnerId
WHERE   b.PartitionId = 1
        AND vcim.IdentityId IS NULL

-- tbl_Changeset OwnerId
UPDATE  c
SET     c.OwnerId = @ownerId
FROM    tbl_Changeset c
LEFT JOIN tbl_VCIdentityMap vcim
ON      vcim.PartitionId = c.PartitionId
        AND vcim.IdentityId = c.OwnerId
WHERE   c.PartitionId = 1
        AND vcim.IdentityId IS NULL

-- tbl_Changeset CommitterId
UPDATE  c
SET     c.CommitterId = @ownerId
FROM    tbl_Changeset c
LEFT JOIN tbl_VCIdentityMap vcim
ON      vcim.PartitionId = c.PartitionId
        AND vcim.IdentityId = c.CommitterId
WHERE   c.PartitionId = 1
        AND vcim.IdentityId IS NULL

在这个脚本之后,我能够 运行 labels 命令。但仍然有一些不良账户 - TF14132:未找到身份

根据标签的名称,我能够获取不良用户的身份并将其更新为良好用户。

select * from tbl_Label where LabelName like '%BadLabelIdentityName%'

DECLARE @ownerId INT = GoodIdentityNumber
UPDATE  l
SET     l.OwnerId = @ownerId
FROM    tbl_Label l
where l.OwnerId = BadIdentityNumber