还原历史记录以拆分存储库

时间:2013-11-28 12:42:54

标签: mercurial split repository

正确或错误(几乎肯定是错误的)我最终处于以下位置:

我们曾经拥有一个大型的mercurial存储库。我们现在已将此代码库的大部分内容移至单独的存储库中。回顾过去,似乎我们可以通过保存文件历史记录的方式完成此操作,但我们只是简单地将文件复制到新的存储库中。

我们现在处于两个存储库已拆分的位置,但我想将移动文件的文件历史记录附加到新存储库中的文件历史记录中。文件已在原始存储库中删除 - 但这段历史显然仍然存在。

无论如何,将原始存储库中文件的历史记录“预先挂起”到拆分存储库中的文件?

2 个答案:

答案 0 :(得分:1)

我不知道在您完成拆分后附加文件历史记录,但如果您可以重新执行此操作,则这是一个选项:

在原始存储库中,在删除文件之前返回上一个修订版(REV):

hg up -r REV

从原始存储库向上一级并创建两个新克隆:

hg clone OriginalRepo Split1
hg clone OriginalRepo Split2

进入 Split1 ,删除该存储库中不需要的文件,然后提交。对 Split2 执行相同操作。这两个现在是您的新拆分存储库,都具有完整的历史记录。当然,所有已删除文件的历史记录(即使是您最初不想在存储库中存储的文件)也会在两个存储库中同等存在。

如果您在之后在新的存储库中完成了很多工作,那么您可以将它们添加到 Split1 中使用导出/导入拆分2 (选中hg help importhg help export)。根据您所做的更改次数,可能有更好的方法(例如 mercurial queues ),但这是我首先想到的。

答案 1 :(得分:1)

convert extension允许您将Mercurial存储库转换为另一个存储库,同时排除和修改文件名(使用--filemap选项)。

因此,请使用convert命令两次,每次拆分一次,并使用相应的文件映射,该映射只涉及应该位于特定目标存储库中的文件。

如果你已经在拆分回购中提交了你不想放弃,那么无论如何都要使用转换方法,之后将你在分割中创建的新提交转移到新的拆分回购用转换制作:

假设您丢失历史记录的旧分组为os1os2,并且使用convert命令创建的新分组为ns1ns2。然后在ns1中你会做

  1. hg pull --force os1(强制是必需的,因为你是从无关的回购中提取的),
  2. hg rebase -s <first-new-commit-made-in-os1> -d <last-converted-commit-in-ns1>(使用转换为你的拆分提供新的提交)
  3. hg strip <first-commit-at-all-in-os1>discard您从os1取出但不再需要的所有内容)
  4. os2ns2

    类似地执行此操作