【问题标题】:Migration of TFS to GIT using git-tfs tool not migrating all the branches and some changes of branches使用 git-tfs 工具将 TFS 迁移到 GIT 不会迁移所有分支和分支的一些更改
【发布时间】:2019-12-07 10:42:42
【问题描述】:

我正在尝试使用 git-tfs 工具将 TFS 迁移到具有历史记录的所有分支的 GIT。但是我只成功获得了少数分支,而其他分支则缺少历史记录(最近一次)。很少有分支甚至没有迁移。 我使用以下命令进行迁移:

git tfs clone <tfsurl> <trunk> --branches=All --debug

我在调试日志中收到以下分支和变更集错误:

Looking for changeset 78197 in git repository: CacheIsFull, stopped looking.
error: an error occurs when initializing the branch. Branch is ignored and continuing...

我也在相关帖子中查看了类似问题,但没有一个提供解决方案。例如: https://github.com/git-tfs/git-tfs/issues/461

我希望将所有分支和历史从 TFS 迁移到 GIT 存储库。

【问题讨论】:

    标签: git tfs git-tfs


    【解决方案1】:

    这不是由第三方团队处理的官方工具。并根据their description

    这个项目不再积极维护,因为我们不再是 TFS 的用户。因此非常有用,git-tfs 不能免除 not 支持的用例。如果您遇到遗漏或问题, 请贡献,我们很乐意为您提供帮助。

    记住:

    解决问题的最快方法是提交修复问题的 PR。

    修复它最慢的方法是希望别人能修复它。

    在尝试使用 Git-TFS 进行迁移之前,您应该意识到 TFVC 和 Git 存储历史记录的方式之间存在根本区别:

    • Git 将历史记录存储为及时的存储库快照,而 TFVC 记录文件上发生的离散操作。改变
      无法表达 TFVC 中的重命名、取消删除和回滚等类型
      在 Git 中;而不是看到文件 A 被重命名为文件 B,您可能
      只看到文件A被删除,文件B被添加到同一个
      提交。
    • Git 没有 TFVC 标签的直接模拟:标签可以包含任何特定版本的任意数量的文件,并且可以反映 不同版本的文件。尽管在概念上相似,Git 标签指向整个存储库在某个点的快照 时间。如果您依靠 TFVC 标签来了解交付的内容,Git 标签可能无法提供此信息。
    • TFVC 中的合并发生在文件级别,而不是在整个存储库中。您只能合并一个更改文件的子集 分支到另一个,然后将剩余的更改文件合并到一个 后续变更集。在 Git 中,合并会影响整个 存储库,并且您无法将两组单独的更改视为 合并。

    Source Link

    由于这些差异,我们通常建议用户进行提示迁移并将其 TFVC 存储库保持在线但只读以查看历史记录。

    这是微软将 Windows 和其他产品从集中式版本控制迁移到 Git 时采用的方法。

    tip迁移请使用官方TFVC import tool

    如果你坚持使用git-tfs,我也遇到过一些类似的问题,有多个根本原因,例如一些分支被重命名(删除并创建一个新的),无限循环拉特定分支,死分支,长克隆等。

    似乎有几种方法和解决方法。您可能需要深入研究它们并根据自己的情况找到正确的方法。

    【讨论】:

    • 感谢@patricklu-msft 的详细信息,我还发现下面的命令可用于检索更多在克隆命令中失败的分支。 git tfs 分支 -init --all
    • @DharmendraKumar 感谢您的有用分享,这也将帮助社区中的其他人。
    猜你喜欢
    • 2014-10-20
    • 2021-07-30
    • 2018-02-22
    • 2020-05-18
    • 1970-01-01
    • 2016-04-20
    • 2016-10-06
    • 2011-02-21
    • 2021-06-09
    相关资源
    最近更新 更多