我们的 Main 分支显然刚刚被删除,并且没有记录原因。(分支仍然出现在源代码管理资源管理器中 - 当我查看分支的历史记录时,它是空的)。当我在分支上获得最新消息时,它会在本地删除所有内容。我们有许多看起来都很好的子分支,但是 Main 现在是空的,没有记录如何/为什么。有人知道我们如何弄清楚发生了什么并恢复它吗?我们有一个应该是重复的子分支,所以我们应该没问题,但我们真的很想弄清楚发生了什么!
2 回答
可能发生了什么
我能想到一些事情,在这种情况下最合乎逻辑的是有人发出了一个tf destroy $/project/Branch/* /recursive
,这会产生观察到的效果。
也可能是有人重命名了分支,这在历史记录中本身是不可见的,除非您在 Team Foundation 源代码控制选项的选项中打开“显示已删除的项目”选项。
您的应用程序层的版本控制缓存可能已损坏,发生这种情况的可能性非常小,但它可能已经导致了这种情况。确保您对数据库进行了良好的备份,即使看起来确实如此.
你怎么知道发生了什么?
检查tbl_command
项目集合数据库或访问 Web 访问服务器上的隐藏_oi
活动日志页面。您可能能够找到导致删除的命令。
如果这没有告诉您,请分析 SQL Server 的事务日志(如果您的服务器配置为保留这些日志)。
现在做什么?!
备份您的 TFS 服务器或保护您拥有的服务器(如果您还没有这样做)
如果版本控制缓存是清除它的罪魁祸首(在应用层机器上)可能会解决您的问题,缓存位置会显示在 TFS 管理控制面板上:
解决此问题的最佳方法是暂时停止 TFS 服务器,然后删除此文件夹的内容。
似乎有几种方法:
忘记它,获取最新分支的内容并使用它来重新填充丢失的数据。只需将它们添加到空文件夹中,检入它们,然后重新合并所有其他分支并解决所有冲突。
- 优点:快
- 缺点:你失去了历史,解决冲突将是一项可怕的任务。
将项目集合数据库恢复到以前的时间点(警告!可能需要将所有项目集合恢复到以前的时间点)
- 优点:您可以恢复所有历史记录
- 缺点:自上次已知良好备份以来所做的更改会丢失,需要大量工作,会影响同一集合中的所有项目,可能会影响同一服务器上的所有项目。
将整个服务器恢复到临时服务器,并将包含丢失数据的集合恢复到最后一次已知的正确配置。使用 OpsHub 或 Team Foundation Migration Toolkit 之类的工具重播灾难后的更改。
- 优点:您可以回到最新的时间点
- 缺点:在 TFS 迁移方面需要大量时间和专业知识
恢复集合数据库并使用事务日志重放对集合的尽可能多的更改,然后跳过执行销毁的事务。不过要小心,通常销毁操作会将文件标记为已删除,但作业会在后台进行实际删除。
- 优点:您可以回到最新的时间点
- 缺点:在 SQL 方面需要大量时间和专业知识
联系 Microsoft 支持并获得现场专家。如果在不立即触发清理作业的情况下完成删除,他们可能能够恢复删除。
- 优点:您将回到可能的最佳状态
- 缺点:这将是昂贵的
无论您做什么,请确保您有当前情况的备份,以便您在第一次尝试失败时尝试不同的策略。
考虑拆分项目集合以允许其他项目继续工作。您最终会遇到这样一种情况,即这个项目最终会单独出现在一个孤立的项目集合中,但它可以让您快速前进。
好的 - 这是一个记录簿,因为该项目莫名其妙地在当天晚些时候重新出现。它的所有历史也都回来了。我原以为这里的 DBA 可能进行了数据库恢复,但这是不可能的,因为整天发生的所有签入仍然存在。
因此,如果将来发生这种情况,请交叉手指等待几个小时!
ps 我确实查看了 SQL 日志,但找不到任何东西。奇怪!