有人离开了组织,但在离开之前,他以未知原因锁定了所有文件。
您如何将它们全部解锁,以便其他开发人员可以工作?
有人离开了组织,但在离开之前,他以未知原因锁定了所有文件。
您如何将它们全部解锁,以便其他开发人员可以工作?
对于以下操作,您需要是您想要撤消签入的项目的项目管理员,或者如果您想在所有项目中执行此操作,您需要是 Team Foundation 管理员。
如果您仍然拥有此人的用户名,您可以简单地执行以下操作:
tf lock /lock:none /workspace:WorkspaceName;USERNAME /recursive $/
要获取用户的工作区列表,只需在同一提示符下运行以下命令:
tf 工作区/所有者:用户名
有关更多命令,请查看tf /?
如果开发人员已经离开了组织,那么最好的办法就是删除他们的工作区。这将为您解锁文件,但也会释放服务器上的一些资源。
请参阅几年前发生在我身上的有关该主题的以下博客文章。
http://www.woodwardweb.com/vsts/unlocking_files.html
您可以使用命令行 (tf.exe) 删除工作区,也可以使用 Atrice 的出色TFS Sidekicks。
这是我解决此问题的唯一方法,其中涉及删除用户的工作区。
如果错误消息显示“项目 $/... 已被工作空间 someMachine123 中的 someUser:1 锁定以供签出。” 然后我使用命令:
tf workspace /delete /server:http://machinename:8080/tfs/DefaultCollection someMachine123;someUser:1
集合 URL 和someMachine123;someUser:1
.
请注意,我注意到错误消息将用户称为someUser:1
,因此我在命令中模仿了这一事实。仅运行命令是不够的someUser
。我不确定 :1 是什么意思,但重点是模仿错误消息。
请注意,服务器必须是完全限定的集合路径,您可以通过转到 Team Foundation Server 管理控制台->应用程序层->团队项目集合来找到它,底部窗格将显示在上部选择的集合的 URL窗格。
我也遇到了一个问题,因为我不小心尝试使用复数workspaces
而不是仅仅workspace
因为有一个类似的命令是复数。
首先,您需要有权这样做。如果你有最简单的方法是使用 attrice http://www.attrice.info/cm/tfs/的 TFS 助手
这是使用 TFS 权限的说明。
需要将“解锁其他用户的更改”权限设置为允许才能删除其他用户持有的锁。
我需要添加 /collection:collectionURL 否则找不到工作区:
tf loc /lock:none /workspace:WorkspaceName;用户名 /collection:collectionURL
让系统管理员重置该用户密码,以该用户身份登录,解锁所有文件...
我认为这是几乎所有“不再在该组织工作的人”问题的解决方案......
最好从服务器中删除该用户的工作区。例子
tf 工作区 /delete /server:your_tfs_server 工作区;用户名
有时这掩盖了一个完全不同的应用程序被另一个用户锁定的不同问题,但您甚至无法为您希望合并到的新项目创建一个新文件夹(目标不允许创建并错误地指出某人有一个文件以他们的名义锁定),但随后您深入挖掘,另一个项目是罪魁祸首。
因此,一个完全不同的项目可能会出现文件被其他人锁定的问题。
对我有用的方法,我的帐户对TFS和项目具有管理员权限:
在 Visual Studio 2015 中:
现在,每个开发人员都可以轻松提交他的更改 :)
通过使用 TFS 权限,打开 Visual Studio 命令提示符,运行以下命令:
tf undo /workspace:workspaceName;DomainName\UserName $/file path in your solution
将此解决方案用作最后的手段。
我正在使用 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>>