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

有没有办法在mercurial中向文件添加历史记录?,mercurial,Mercurial,我们进行了一些常规的代码重组,导致一些项目的一部分转移到不同的新存储库中。现在有几个文件(实际上最重要的是一个特定的文件)我想保存历史记录 问题:是否可以导出单个文件的历史记录并将其导入到另一个存储库中,该存储库中已有该文件 也许只需要主要的分支就可以了 说明:现状 Old Repo Repo "New /--> V2---\ << not required

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

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

也许只需要主要的分支就可以了

说明:现状

Old Repo                                         Repo "New

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

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

简而言之,答案是否定的

较长的答案仍然是否定的,但原因如下:-)Mercurial只会在物理上和逻辑上添加到存储库中,因此您可以向后绘制箭头(或者更确切地说,不是向后绘制,而是应该向后绘制)。由于您已经有了返回到V5的V6,这将返回到“没有更早的内容”,因此您添加的任何内容都将是返回到V6的V7或更高版本


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

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

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

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

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


使用
convert
时,我建议将不同的步骤(filemap、branchmap等)作为不同的单独“过程”来完成。每个人都将创建一个新的临时存储库。这只会使每一步都变得简单易懂。

这种方法肯定会奏效,但如果文件的历史记录很长,则可能会非常缓慢/乏味或容易出错。但对于问题中显示的5或6个修订(如果准确的话),这是一个很好的解决方案。在文件上使用hg revert命令反复从连续的修订中选取其内容会使文件内容很难出错。@DaveInCaz:BTW我同意使用是一般的做法。