有没有办法在mercurial中为文件添加历史记录?

问题描述 投票:2回答:2

我们做了一些通用的代码重组,导致一些项目的一部分进入不同的新存储库。现在有一些文件(实际上最重要的是一个特定的文件),我想保留历史记录。

问题:是否可以导出单个文件的历史记录并将其导入到该文件已可用的另一个存储库中?

也许只需要主分支就有帮助。

插图:现状

Old Repo                                         Repo "New

          /--> V2---\    << not required
         /           \
V0 --> V1 ---> V3 --> V4  << required            V5 --> V6 ...

插图:理想情况

New Repo

V0 --> V1 --> V3 --> V4 --> V5 --> V6 ...
mercurial
2个回答
1
投票

最简洁的答案是不。

更长的答案仍然没有,但有理由。 :-) Mercurial只在物理和逻辑上添加到存储库中,因此您向后绘制箭头(或者更确切地说,不向后绘制,但它们应该向后)。由于你已经将V6引回到V5,这导致“没有更早出现”,你添加的任何东西都将是V7或更高版本,可以回到V6。

您可以做的是构建另一个新的repo,在其中复制并提交V0,然后复制并提交V1,依此类推,直到达到V6。这为您提供了一系列新的提交,具有所需的历史记录。让每个人切换到新的新回购,你就完成了。这是多么痛苦(以及它有多痛苦)主要取决于你最近一次切换过多少。


2
投票

是的,您可以使用hg convert和至少其--filemap参数来实现您的目标。

当您设置新的存储库时,您可以修改其历史记录,至少在将其推送给其他任何人之前。此外,您可以使用原始的修改衍生作为合并到新原型的基础。

方法应该是将旧的存储库convert转换为新的存储库,其中只保留一个特定文件的历史记录。然后,您可以从已转换的存储库中拉出新的存储库(请参阅:pull from unrelated)。

(根据您的分支方案,您可能还希望使用--branchmap的转换过程将重要文件的历史记录放入其自己的分支中。这有助于稍后识别这些历史更改。如果是这样,那么一旦您合并了回购您可以将该分支合并到新分支中。)

当使用convert时,我建议将不同的步骤(文件映射,分支映射等)作为不同的单独“通过”来完成。每个人都将创建一个新的临时存储库。这使得每一步都变得简单易懂。

© www.soinside.com 2019 - 2024. All rights reserved.