我在 TFS 中的主要分支刚刚消失了 - 为什么?

My Main branch in TFS just disappeared - why?

我们的 Main 分支显然刚刚被删除,没有记录原因。 (该分支仍然出现在源代码管理资源管理器中 - 当我查看分支的历史记录时,它是空的)。当我在分支上获得最新信息时,它会删除本地的所有内容。我们有许多看起来都很好的子分支,但是 Main 现在是空的,没有 how/why 的记录。任何人都知道我们如何弄清楚发生了什么并恢复它?我们有一个应该重复的子分支,所以我们应该没问题,但我们真的很想弄清楚发生了什么!

可能发生了什么

我能想到一些事情,在这种情况下最合乎逻辑的是有人发布了 tf destroy $/project/Branch/* /recursive,这将产生观察到的效果。

也可能是有人重命名了分支,除非您在 Team Foundation 源代码控制选项的选项中打开 "Show Deleted Items" 选项,否则这在历史记录中是不可见的。

您的应用程序层的版本控制缓存可能已损坏,发生这种情况的可能性很小,但它可能是造成这种情况的原因。确保您对数据库进行了良好的备份,即使这看起来可能是这种情况,如果不是这样,您将需要数据库备份,并且它越旧,标记为删除的数据就越不可能仍然存在.

你怎么知道发生了什么事?

检查项目集合数据库中的 tbl_commandaccess the hidden _oi activity log page on the web access server。您或许能够找到导致删除的命令。

如果那没有告诉你,请分析 SQL 服务器的事务日志(如果你的服务器配置为保留这些)。

现在该怎么办?!

备份您的 TFS 服务器,如果您还没有这样做,请保护您拥有的服务器

如果版本控制缓存是罪魁祸首,清除它(在应用层机器上)可能会解决您的问题,缓存位置显示在 TFS 管理控制面板上:

解决此问题的最佳方法是暂时停止 TFS 服务器,然后删除此文件夹的内容。

好像有几个出路:

  • 算了吧,获取最新分支的内容并使用它来重新填充丢失的数据。只需将它们添加到空文件夹中,签入它们,然后重新合并所有其他分支并解决所有冲突。

    • 专业版:快速
    • 缺点:你失去了历史,解决冲突将是一项可怕的任务。
  • 将项目集合数据库恢复到以前的时间点(警告!可能需要将所有个项目集合恢复到以前的时间点)

    • 专业版:您可以恢复所有历史记录
    • 缺点:您丢失了自上次已知良好备份以来所做的更改,需要大量工作,会影响同一集合中的所有项目,可能是同一服务器上的所有项目。
  • 将整个服务器恢复为临时服务器,并将丢失数据的集合恢复为上次已知的正确配置。使用 OpsHub 或 Team Foundation Migration Toolkit 等工具重播灾难发生后的变化。

    • 专业版:您可以回到最新的时间点
    • 缺点:TFS 迁移需要大量时间和专业知识
  • 恢复集合数据库并使用事务日志重放对集合所做的尽可能多的更改,然后跳过执行销毁的事务。不过要小心,通常销毁操作将文件标记为已删除,但作业会在后台进行实际删除。

    • 专业版:您可以回到最新的时间点
    • 缺点:在 SQL
    • 方面需要大量时间和专业知识
  • 联系 Microsoft 支持并在现场找一位现场专家。如果没有立即触发清理作业,他们可能能够恢复删除。

    • 专业人士:您将尽可能回到最佳状态
    • 缺点:代价高昂

无论您做什么,请确保您有当前情况的备份,这样您就可以在第一次尝试失败时尝试不同的策略。

考虑拆分项目集合以允许其他项目继续工作。您最终会遇到这样一种情况,即这个项目最终独立于一个孤立的项目集合中,但它可以让您快速前进。

好的 - 这是一本记录簿,因为当天晚些时候该项目莫名其妙地重新出现了。它的所有历史也都回来了。我本以为这里的 DBA 可能会恢复数据库,但这是不可能的,因为整天进行的所有签入仍然存在。

因此,如果您以后遇到这种情况,请祈祷并等待几个小时!

p.s。我确实查看了 SQL 日志,但找不到任何内容。奇怪!