0

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

4

1 回答 1

0

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

你必须做的:

  1. 在新的 git 存储库中迁移历史记录(这不是一件容易的事,但我认为你成功了)

  2. 将此新存储库作为远程添加到已包含最新历史记录的存储库中 ( git remote add ...) 和git fetch --all

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

  4. 您现在必须尝试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(将更新中央远程存储库)
于 2019-06-24T13:05:30.060 回答