【发布时间】:2010-09-21 02:20:19
【问题描述】:
有人离开了组织,但在离开之前,他以未知原因锁定了所有文件。
您如何将它们全部解锁,以便其他开发人员可以工作?
【问题讨论】:
标签: version-control command-line tfs administration
有人离开了组织,但在离开之前,他以未知原因锁定了所有文件。
您如何将它们全部解锁,以便其他开发人员可以工作?
【问题讨论】:
标签: version-control command-line tfs administration
对于以下操作,您需要是要撤消签入的项目的项目管理员,或者如果您想在所有项目中执行此操作,则需要是 Team Foundation 管理员。
如果您仍然拥有此人的用户名,您可以简单地执行以下操作:
tf 锁定 /lock:none /工作区:工作区名称;用户名 /递归$/
要获取用户的工作区列表,只需在同一提示符下运行以下命令:
tf 工作区 /owner:username
更多命令,查看tf /?
【讨论】:
tf lock /lock:none /login:... /workspace:... <filename>,但它返回错误“必须保持锁定,因为它的文件类型防止多次签出”
tf undo 解决了这个问题。
如果开发人员离开了组织,那么最好的办法就是删除他们的工作区。这将为您解锁文件,但也会释放服务器上的一些资源。
请参阅几年前发生在我身上时关于该主题的以下博客文章。
http://www.woodwardweb.com/vsts/unlocking_files.html
您可以使用命令行 (tf.exe) 删除工作区,也可以使用 Attrice 的出色 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 助手
【讨论】:
Here's 使用 TFS 权限的说明。
具有“解锁其他用户的更改” 权限设置为允许是必需的 删除另一个用户持有的锁。
【讨论】:
我需要添加 /collection:collectionURL 否则找不到工作区:
tf loc /lock:none /workspace:WorkspaceName;UserName /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_>。忽略 Tfs_Configuration MSSQL 数据库。我不确定,但如果您没有 Tfs_> 数据库,则设置可能在 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>>
【讨论】: