当我尝试运行命令
时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
我可以从其他集合中获取标签并获取特定用户的标签。
我打开了一张事故罚单,但我想在这里查看是否有人有潜在的解决方案。
干杯
答案 0 :(得分:0)
所以问题最终是TFS标签与不再存在的用户帐户相关联。
microsoft rep在下面创建了以下脚本。它会将错误标签分配给现有帐户。
/* 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