使用 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 命令,并从config
file 中删除了[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/default
和git update-ref -d refs/remotes/tfs/default
。以上是关于使用 git-tfs 迁移 TFS 到 Git:迁移后如何完全断开 Git 与 TFS 的连接?的主要内容,如果未能解决你的问题,请参考以下文章