将 TFVC 迁移到 Git - 应该迁移历史记录吗?
Posted
技术标签:
【中文标题】将 TFVC 迁移到 Git - 应该迁移历史记录吗?【英文标题】:Migrate TFVC to Git - Should History be migrated? 【发布时间】:2021-08-16 15:05:26 【问题描述】:我希望从 TFVC 迁移到 TFS Git。
我注意到微软推荐:
"由于 TFVC 和 Git 存储版本控制历史的方式不同,我们建议您不要迁移历史记录。"...没有详细说明为什么不推荐。
从 TFVC 迁移到 Git 时不迁移历史记录的原因是什么?供参考:我们的代码库已有约 9 年历史,由 2 个主要项目组成,约 82k 文件和约 400k 行代码,以及约 90k 文件和约 500k 行代码
【问题讨论】:
TFVC 如何存储历史记录? 作为一系列变更集。相当于 Git 提交 这不等同。 Git 提交是 repo 中所有文件的快照,而不是变更集。 @evolutionbox 对我来说这不是存储有问题的文件的技术方法。但更多的是什么以及如何存储它。在使用 git-lfs 之前,将 TFVC 项目转换为 git 会很愚蠢,因为您最终会得到一个包含太多大文件的太大存储库。现在,剩下的主要问题是您将所有项目存储在 TFVC 集合中的方式,它们都在同一个地方并且可能错综复杂。如果您的项目分离良好,迁移仍然会非常缓慢,但可能。否则,这将是一个痛苦,也许不值得 => MS 推荐.. 【参考方案1】:最终找到了这提供了一些信息: https://docs.microsoft.com/en-us/devops/develop/git/migrate-from-tfvc-to-git
在尝试使用 Git-TFS 迁移之前,请注意 TFVC 和 Git 存储历史记录的方式之间存在根本差异:
Git 将历史记录存储为及时的存储库快照,而 TFVC 记录文件上发生的离散操作。 TFVC 中的更改类型(如重命名、取消删除和回滚)无法在 Git 中表达。它不会看到文件 A 被重命名为文件 B,它只会跟踪文件 A 被删除和文件 B 在同一次提交中添加。 Git 没有 TFVC 标签的直接模拟。标签可以包含任何特定版本的任意数量的文件,并且可以反映不同版本的文件。尽管在概念上相似,Git 标签指向整个存储库在某个时间点的快照。如果项目依赖 TFVC 标签来了解交付的内容,则 Git 标签可能不会提供此信息。 TFVC 中的合并发生在文件级别,而不是在整个存储库中。只有更改文件的一个子集可以从一个分支合并到另一个分支。然后可以将剩余的更改文件合并到后续更改集中。在 Git 中,合并会影响整个存储库,并且不能将两组单独的更改视为合并。
由于这些差异,建议用户进行提示迁移并保持其 TFVC 存储库在线,但为只读,以便查看历史记录。
【讨论】:
以上是关于将 TFVC 迁移到 Git - 应该迁移历史记录吗?的主要内容,如果未能解决你的问题,请参考以下文章
如何将 TFVC 项目从 Azure DevOps 服务器迁移到新的 Azure DevOps 帐户作为 Git 存储库
SVN 到带有提交历史的 GIT 迁移(使用 git svn)