代码移动后,是否可以将历史记录从TFVC存储库迁移到Git存储库?

时间:2019-06-24 10:18:43

标签: git migration git-history

去年,TFS TFVC存储库中的代码被复制到没有历史记录的TFS Git存储库中。这只是将文件复制/粘贴到新的git存储库中。现在是否可以从旧的TFVC存储库中迁移历史记录?

1 个答案:

答案 0 :(得分:0)

这是可能的,但这取决于您的期望。

您必须做什么:

  1. 将历史记录迁移到新的git存储库中(这不是一件容易的事,但我认为您一定会成功完成)

  2. 将此新存储库添加为已包含最新历史记录(git remote add ...git fetch --all

  3. 的存储库中的远程数据库。
  4. 在最后一次提交时创建一个本地分支并将其推送到您的中央存储库。

  5. 您现在必须使用git replace --graft才能将旧的历史与新的历史链接起来。

来自文档:

  

git replace --graft <commit> [<parent>…​]

     

创建嫁接提交。将创建一个新提交,其内容与父提交相同,只是其父将是[…]而不是的父。

因此运行命令:

git replace --graft <sha1_first_commit_new_history> <sha1_last_commit_old_history>

在这里,您有2个选择:

  • 在所有现有存储库中运行此命令,并在每次克隆存储库时运行此命令。

  • 使嫁接成为永久性的,但缺点是新历史的所有sha1都将改变。您必须查看它是否适合您。

如果是这样:

  1. git filter-branch -- --all使其永久保存(此后验证结果,如果一切正常,请删除筛选分支备份分支)
  2. git push --force -- --all(将更新中央远程存储库)