使用 git-tfs 迁移 TFS 到 Git:迁移后如何完全断开 Git 与 TFS 的连接?

Posted

技术标签:

【中文标题】使用 git-tfs 迁移 TFS 到 Git:迁移后如何完全断开 Git 与 TFS 的连接?【英文标题】:TFS to Git migration with git-tfs: how to completely disconnect Git from TFS after migration? 【发布时间】:2021-06-09 17:33:15 【问题描述】:

我成功克隆了一个 TFS 存储库,但 git log 仍然显示 HEAD 指向 master 和 tfs/default,如下所示:

(HEAD -> master, tfs/default)

我已经尝试了 filter-branch 命令,并从configfile 中删除了[tfs][git-tfs] 部分并运行以下命令:

git reflog expire --all
git gc --aggressive --prune
git tfs cleanup
git tfs cleanup-workspace

但它仍然存在。唯一可行的方法是删除.git 文件夹,然后运行git init,但这当然会丢失所有历史记录。我还检查了git config --list --show-all,但那里没有远程 TFS 存储库。

问题是否可以在使用 git-tfs 后完全断开 TFS 与 git 存储库的连接而不会丢失历史记录,如果可以,如何操作?


编辑接受的答案有效且具有启发性,但请参阅this answer on SuperUser,了解我理解的“更安全”的方法。

【问题讨论】:

没有“TFS”存储库之类的东西。你说的是 TFVC 吗? 【参考方案1】:

是否可以在使用 git-tfs 后完全断开 TFS 与 git repo 的连接而不会丢失历史记录

您的 git 存储库未“连接”到 TFS 服务器。它只包含一些允许 git-tfs 能够与 TFVC 源代码控制交互的数据。

您看到的tfs/default 是一个伪 git 远程分支,用于跟踪检索到的最后一个变更集。

如果是,怎么做?

因为它是作为 git remote 存储的,所以更容易删除文件:

.git/refs/remotes/tfs/default

注意:如果找不到这个文件,这是因为 ref 有可能被打包在文件.git/packed-refs 中。如果有,删除refs/remotes/tfs/default对应的行

【讨论】:

它在打包的参考文献中,但里面有 5 行:refs/heads/master, refs/notes/commits, refs/original/refs/heads/master, refs/original/refs/remotes/tfs/default, refs/remotes/tfs/default。您能否在答案中指定我应该删除哪些而不破坏某些东西? @evilmandarine 你的问题的答案已经在我之前的答案中了。您应该删除refs/remotes/tfs/default。其他refs/original/* 是在您执行“过滤器分支”或类似操作时创建的,并且很可能也可以删除。但它很容易为您测试。备份文件并删除要尝试的部分。查看效果,如果它适合您,那没关系,否则撤消更改。这就是我们学习一切的方式...... @evilmandarine 看我之前的评论(我忘了提到你,所以你可能没有收到通知) 您的回答有效,谢谢。我只是想了解我在做什么,而不是仅仅尝试看看它是否有效。寻找什么是打包的参考我找到了this answer on SuperUser并最终做了git show-ref default,然后是git update-ref -d refs/original/refs/remotes/tfs/defaultgit update-ref -d refs/remotes/tfs/default

以上是关于使用 git-tfs 迁移 TFS 到 Git:迁移后如何完全断开 Git 与 TFS 的连接?的主要内容,如果未能解决你的问题,请参考以下文章

Git-TF将更改推送到错误的服务器上

git-tfs 克隆失败,错误代码 128

在 powershell 中运行时出现 Git-Tfs 错误。 “检索 LoaderExceptions”

git-tfs clone 创建空文件夹

带有单独存储库的 git-tf

Git-TFS - 如何在拉取请求被批准之前确保分支是最新的?