有没有一种方法可以将历史记录添加到文件中?

时间:2018-09-04 06:47:06

标签: mercurial

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

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

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

插图:现状

Old Repo                                         Repo "New

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

插图:理想情况

New Repo

V0 --> V1 --> V3 --> V4 --> V5 --> V6 ...

2 个答案:

答案 0 :(得分:2)

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

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

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

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

使用wmic printer get name,default 时,我建议将不同的步骤(文件映射,分支映射等)作为不同的单独“传递”来完成。每个人都会创建一个新的临时存储库。这只会使每个步骤变得简单且易于理解。

答案 1 :(得分:1)

简短的回答是“否”。

更长的答案仍然是否,但有其原因。 :-) Mercurial仅在物理上和逻辑上添加到存储库中,因此您将箭头向后绘制(或者,不是向后绘制,而是应该向后绘制) 。由于您已经将V6引导回V5,这导致“什么都不会更早”,因此您添加的任何内容都将是V7或更高版本并引导回V6。

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