【发布时间】:2016-03-27 06:35:56
【问题描述】:
我们最近从 TFS 2010 升级到 TFS 2015。升级后一切似乎都很好,但我们收到错误消息“项目已锁定在工作区 (null);(null)”。在一些源代码控制文件上。看起来我们有一些孤立的锁需要被追踪和清理,但是 tbl_lock 数据库表不在数据库中,所以下面的 select 查询将不起作用:
select * FROM tbl_Lock l
LEFT JOIN tbl_PendingChange pc
ON l.PendingChangeId = pc.PendingChangeId
WHERE pc.PendingChangeId IS NULL
有谁知道如何在 TFS 2015 中检测和删除这些锁?
我还安装了 TFS 电动工具,Visual Studio 2015 和电动工具都没有开锁。
更新:
顺便说一句,当我运行 SELECT 查询以找出 PendingChangeId 为 NULL 的位置时,我没有返回任何行。我认为诀窍是左连接。当 tbl_Lock 也没有 tbl_PendingChange 上的 PendingChangeId 记录时,PendingChangeId 将为 NULL(因此锁是孤立的)。所以我仍然需要知道 PendingChangeId 通常应该在 TFS 2015 中加入到哪里,以确定哪些文件的锁是坏的。 (或者工作区不再存在,这可能是问题的另一个可能来源。)
而且我还需要知道如何清理那些坏锁。我更喜欢通过 GUI 或命令行使用工具来执行此操作,但也可以使用 API 或 TFS 2015 的 TFS 对象模型文件以编程方式执行此操作。
我真的宁愿只作为最后的手段直接接触数据库。而且我也宁愿在项目上使用 tf vc destroy 作为最后的手段,因为这会清除文件上的所有历史记录。
更新 2
啊哈!我想我找到了一种识别文件的方法,看起来我对发生的事情的想法可能是正确的。不幸的是,我不得不使用 READ UNCOMMITTED 查询来探测数据库以查找信息。我无法以编程方式或使用工具获取此信息。 (他们都显示或表现得好像文件没有被签出。)我在 TFS 2015 上使用的查询是:
select pc.* from tbl_PendingChange pc
left join tbl_Workspace ws on pc.WorkspaceId = ws.WorkspaceId
where ws.WorkspaceId is null
这返回了在我们的数据库上具有 (null);(null) 锁定的三个文件,因为 tbl_PendingChange 上列出的 WorkspaceId 在 tbl_Workspace 上不再存在。
这是怎么发生的?我们的 CI 服务器使用临时 TFS 工作区。我认为升级后发生的事情是我们的 CI 服务器去检查文件并对其应用更新。 (例如,在构建过程中增加版本号。)它检出文件,但未能应用更新。 (我们的工具喜欢使用服务器工作区,但它可能以本地工作区结束,因此该文件仍然在本地签入,但在服务器上签出。因此无法应用对文件的更改。)我们正在使用的代码执行一个工作区。当过程完成时删除操作,所以工作区被删除了——即使工作区仍然有文件被签出!因此,这在 tbl_PendingChange 上创建了一条孤立记录,该记录未链接到任何工作区,因此该文件仍被挂起的更改锁定。但是 GUI 和工具并没有这样看待它,因为他们没有意识到待定更改的工作区不存在。
所以这让我回到了如何解决这个问题?如果有人知道如何处理这些孤立的未决更改,我将不胜感激。我尝试使用:
TfsTeamProjectCollection tfsTeamProjectCollection = TfsTeamProjectCollectionFactory.GetTeamProjectCollection(new Uri(szProjectUri));
VersionControlServer versionControlServer = tfsTeamProjectCollection.GetService<VersionControlServer>();
string[] items = new[] { ... server item path ... };
PendingSet[] queryPendingSets = versionControlServer.QueryPendingSets(items, RecursionType.None, null, null);
PendingSet[] getPendingSets = versionControlServer.GetPendingSets(items, RecursionType.None);
但这些都没有找到孤儿。
更新 3
我终于安装了 Team Foundation Sidekicks 2015 并试了一下 - 特别是状态工具,然后是其他工具。它正在查找待处理的更改,但不是孤立的。
【问题讨论】:
标签: tfs-2015