【问题标题】:What do you do if the file in TFS is locked by someone else?如果 TFS 中的文件被其他人锁定了怎么办?
【发布时间】:2010-09-21 02:20:19
【问题描述】:

有人离开了组织,但在离开之前,他以未知原因锁定了所有文件。

您如何将它们全部解锁,以便其他开发人员可以工作?

【问题讨论】:

    标签: version-control command-line tfs administration


    【解决方案1】:

    对于以下操作,您需要是要撤消签入的项目的项目管理员,或者如果您想在所有项目中执行此操作,则需要是 Team Foundation 管理员。

    如果您仍然拥有此人的用户名,您可以简单地执行以下操作:

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

    tf 锁定 /lock:none /工作区:工作区名称;用户名 /递归$/

    要获取用户的工作区列表,只需在同一提示符下运行以下命令:

    tf 工作区 /owner:username

    更多命令,查看tf /?

    【讨论】:

    • 如何使用不同的凭据执行此操作?
    • 让我换个说法。我使用tf lock /lock:none /login:... /workspace:... <filename>,但它返回错误“必须保持锁定,因为它的文件类型防止多次签出”
    • 没关系,我用 Martin 的回答中的tf undo 解决了这个问题。
    • 我遇到了类似的问题,但是您建议的使用 tf.exe 的递归解锁对我不起作用。 (我没有收到任何警告。它只是没有解锁文件。)我安装了 sidekick,并且能够使用 Status sidekick 撤消锁定。我不想删除工作区或撤消结帐,因为开发人员刚刚出去度假。
    • 谢谢最大!过去的你又帮了我一次!
    【解决方案2】:

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

    请参阅几年前发生在我身上时关于该主题的以下博客文章。

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

    您可以使用命令行 (tf.exe) 删除工作区,也可以使用 Attrice 的出色 TFS Sidekicks

    【讨论】:

    • +1。这有效,而由于权限不足而无法删除工作区,并且尝试解锁文件时出错。
    • 问题是伙伴没有告诉我另一个用户有待处理的检查。但是命令行中的 tf 也没有。事实证明,这个人试图签入,但失败了。然后就离开了。所以我再次将它添加到源中,当我尝试签入时,一些文件签入但其他文件没有签入。真是愚蠢的情况。即使我删除了他的 TFS 工作空间,他也必须在他的机器上执行撤消操作才能解决此问题。
    • 它有效,但要小心。如果您要处理自己的多个工作区,您需要知道您将丢失已删除工作区权限上的更改。
    【解决方案3】:

    这是我解决此问题的唯一方法,其中涉及删除用户的工作区。

    如果错误消息显示“项目 $/... 已被工作空间 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,因为有一个类似的命令是复数。

    【讨论】:

      【解决方案4】:

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

      【讨论】:

      • 是的,您可以使用“状态助手”解锁文件。为我工作。
      【解决方案5】:

      Here's 使用 TFS 权限的说明。

      具有“解锁其他用户的更改” 权限设置为允许是必需的 删除另一个用户持有的锁。

      【讨论】:

        【解决方案6】:

        我需要添加 /collection:collectionURL 否则找不到工作区:

        • 列表项

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

        【讨论】:

        • 这是正常的。我当时用的版本没有收藏。
        【解决方案7】:

        让系统管理员重置该用户密码,以该用户身份登录,解锁所有文件...

        我认为这是解决几乎所有“不再在该组织工作的人”问题的解决方案...

        【讨论】:

        • 这是最好的万无一失的解决方案......并不总是可行的,但最好的解决方案;)
        • 不幸的是,如果他们已经删除了他们的域帐户,通常这不是一个选项。
        【解决方案8】:

        最好从服务器中删除该用户的工作区。示例

        tf 工作区 /delete /server:your_tfs_server 工作区;用户名

        【讨论】:

          【解决方案9】:

          有时这掩盖了一个完全不同的应用程序被另一个用户锁定的不同问题,但您甚至无法为您希望合并到的新项目创建一个新文件夹(目标不允许创建并错误地说明有人以他们的名义锁定了一个文件),但随后您深入挖掘,另一个项目就是罪魁祸首。

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

          【讨论】:

            【解决方案10】:

            对我有用的方法,我的帐户对 TFS 和项目具有管理员权限:

            在 Visual Studio 2015 中:

            1. 转到 团队资源管理器
            2. 在您的解决方案上单击鼠标右键并选择 在源代码管理中打开 出口商
            3. 在左侧单击右侧的解决方案
            4. 选择高级
            5. 选择锁定...
            6. 在左侧单击右侧的解决方案
            7. 选择高级
            8. 选择解锁(现在可以选择解锁)

            现在,每个开发人员都可以轻松提交他的更改 :)

            【讨论】:

              【解决方案11】:

              通过使用 TFS 权限, 打开 Visual Studio 命令提示符,运行以下命令:

              tf undo /workspace:workspaceName;DomainName\UserName  $/file path in your solution
              

              【讨论】:

                【解决方案12】:

                将此解决方案用作最后的手段

                我使用的是 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>>
                

                【讨论】:

                • 请解释否决票。我尝试了所有其他建议,但我可以确认这是唯一对我有用的东西。在我的情况下,由于我的雇主将 TFS 移动到另一台服务器期间的一些错误,该文件被锁定。它被我的旧用户名锁定,该用户名已被删除。我的新用户名不同了,我找不到其他方法可以将其链接起来。
                • 你不应该接触 TFS 数据库。您应该使用 Microsoft 甚至第三方提供的工具,例如 Atrice TFS Side kicks。这就是我投反对票的原因。
                • 我尝试了在线建议的所有内容:TFS 管理工具、删除缓存文件夹、使用工作区下拉菜单、tf 工作区 /remove:*、从控制面板、IE 等清除凭据。我没有尝试 Sidekicks,但在尝试使用其他工具数小时后,我认为直接访问源代码会更好——这很有效,而且我的 TFS 仍然存在。最后,还原更改只需将 NULL 替换为旧值即可。
                • 使用 Atrice Sidekicks 非常简单。只需找到文件并点击解锁按钮。您是管理员还是检查了该文件的权限?无论如何,如果你得到了你需要的东西。
                • 是的,Sidekicks 让您可以查看所有工作区,也可以删除它们。它将删除存储在 TFS 中的引用,而不是与其关联的实际计算机。
                猜你喜欢
                • 2019-02-12
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2020-03-13
                • 2012-06-20
                • 1970-01-01
                • 2013-08-11
                • 1970-01-01
                相关资源
                最近更新 更多