如果TFS中的文件被其他人locking,你会怎么做?

有人离开组织,但在离开之前,他locking了所有文件,原因不明。

你如何解锁它们,以便其他开发者可以工作?

对于以下操作,如果要在所有项目中执行此操作,则需要成为要撤消签入的项目的项目pipe理员或Team Foundation Administrator。

如果你仍然有这个人的用户名,你可以简单地做这样的事情:

  • 打开Visual Studio命令提示符(开始 – >程序 – > Microsoft Visual Studio 200X – > Visual Studio工具 – > Visual Studio 200X命令提示符)
  • 运行以下命令:

tf lock / lock:none / workspace:WorkspaceName; USERNAME / recursive $ /

要获取用户的工作空间列表,只需从相同的提示符处运行以下命令:

工作空间/所有者:用户名

有关更多命令,请查看tf /?

如果开发者离开了组织,那么最好的办法是删除他们的工作区。 这将为您解锁文件,但也释放了服务器上的一些资源。

看到几年前发生在我身上的以下博客文章。

http://www.woodwardweb.com/vsts/unlocking_files.html

您可以使用命令行(tf.exe)删除工作区,也可以使用Attrice提供的优秀TFS Sidekicks 。

首先你需要有权这样做。 如果你有最简单的方法就是使用TFS sidekicks atatice http://www.attrice.info/cm/tfs/

这是我解决这个问题的唯一方法,涉及删除用户的工作区:

http://2toad.com/Blog/2012/1/27/how-to-manage-tfs-workspaces

如果错误消息显示“项目$ / …已被某个用户locking以检出:1在工作区someMachine123中”。 那么我使用这个命令:

 tf workspace /delete /server:http://machinename:8080/tfs/DefaultCollection someMachine123;someUser:1 

集合URL和someMachine123;someUser:1之间只有一个空格someMachine123;someUser:1

请注意,我注意到错误消息提到用户为一些用户someUser:1 ,所以我模仿了这个命令。 只用一些用户运行命令是不够的。 我不确定:1是什么,只是指出,模仿错误消息。

请注意,服务器必须是完全限定的收集path,通过转至Team Foundation Serverpipe理控制台 – >应用程序层 – >团队项目集合,可以find该path,底部窗格将显示在上方select的集合的URL窗格。

我也有一个问题,因为我不小心尝试使用复数workspaces而不是workspace因为有一个类似的命令是复数。

我需要添加/收集:collectionURL,否则无法find工作区:

  • 项目清单

tf loc / lock:none / workspace:WorkspaceName; UserName / collection:collectionURL

这里是使用TFS权限的解释。

将“解锁其他用户的更改”权限设置为“允许”需要删除其他用户持有的locking。

让系统pipe理员重置该用户密码,以该用户身份login,解锁所有文件…

我认为这是几乎所有“不再是这个组织”问题的人的解决scheme。

最好从服务器上删除该用户的工作空间。

tf工作区/删除/服务器:your_tfs_server工作区;用户名

有时候,这会掩盖另一个问题,一个完全不同的应用程序会被另一个用户locking,但是您甚至不能为您想要合并的新项目创build一个新文件夹(目标不会允许创build并错误地指出某人拥有文件locking在他们的名字),但是你深入挖掘,另一个项目是罪魁祸首。

因此,一个完全不同的项目可能会导致其他人locking文件。

作为最后的手段使用这个解决scheme

我正在使用TFS 2012.我去了TFS数据库,并运行以下查询。 它的工作! 当弄乱数据库,备份等等时,当然要非常小心。

数据库被称为Tfs _ << your_TFS_collection_name >> 。 忽略Tfs_Configuration MSSQL数据库。 我不确定,但如果您没有Tfs _ << your_TFS_collection_name >>数据库,则设置可能位于Tfs_DefaultCollection数据库中。 锁被存储在tbl_PendingChange.LockStatus中

 /*Find correct row*/ SELECT LockStatus, PendingChangeId, * FROM tbl_PendingChange WHERE TargetServerItem like '%<<fileName>>%' /*Set lock status to NULL (mine was set to 2 initially)*/ UPDATE tbl_PendingChange SET LockStatus = NULL WHERE TargetServerItem like '%<fileName>>%' AND PendingChangeId = <<PendingChangeId from above>>