代码之家  ›  专栏  ›  技术社区  ›  moswald Jarod42

如何在不使用子repos的情况下将mercurial repo(包括历史记录)导入另一个mercurial repo作为子目录?

  •  41
  • moswald Jarod42  · 技术社区  · 14 年前

    这听起来有点复杂,所以让我解释一下:

    项目_A在其自己的Mercurial知识库中生存了一段时间。现在,项目“A”被折叠成一个新的超级项目“B”。超级项目“B”也有一个灵活的存储库。我们希望项目“A”不是一个子报告,而是一个正常的孩子,但我们也不想失去历史。有办法吗?

    1 回复  |  直到 14 年前
        1
  •  50
  •   Ry4an Brase    14 年前

    是啊。使用转换扩展名将ProjectA向下移动一个目录级别:

    hg convert --filemap filemap.txt projectA projectA-redone
    

    你的哪里 filemap.txt 其中包含此行:

    rename . projectA
    

    (那个点可能是斜线,但我不这么认为)。

    这将为您提供一个新的repo,projecta redone,它具有a的所有历史记录,尽管所有的变更集将具有不同的散列,因为它们的内容(路径)已更改为在所有变更集之前获得“projecta”。

    然后你进入超级项目,做一个 hg pull -f /path/to/projectA-redone . 你需要 -f 因为否则你会被告知回购协议是无关的,因为它们没有共同的变更集。

    最后你会做一个 hg merge 在超级项目中没有冲突(除非你已经有了一个project a目录,在这种情况下你应该选择一个不同的名称或者 hg remove 首先)。

    这样做之后,b将在projecta子目录中包含所有a,并且所有历史记录都将保持不变。