Mercurial Nested Repo Issue

时间:2011-11-21 14:37:36

标签: mercurial repository nested

我不小心在另一个仓库的子目录中创建了一个仓库

由于这样做,子仓库现在包含许多提交

当我尝试在原始(父级?)仓库上使用hg st时,我意识到自己的错误,并且它抱怨一个文件位于嵌套仓库中

我想做的是以某种方式将子仓库历史记录移动到父级,然后删除子仓库,这样我只有一个仓库

dir结构是这样的:

我原来的回购:

core/

我的目录包含src代码我正在尝试版本控制:

core/src/
core/test/

我的意外回购是:

core/src/

e.g。这个我要推的?/ merge?升级到core/仓库,然后杀死core/src/仓库(删除.hg目录)

我已经阅读了一些堆栈溢出讨论,但他们似乎正试图解决更复杂的子仓库场景。我希望有一个直截了当(我敢说这么简单)的解决方案可能存在吗?

我对HG维基没有太多运气

1 个答案:

答案 0 :(得分:4)

保留历史

根据您使用的版本,您可以使用TransplantGraft扩展程序来实现目标。

我从来没有这样做过,也没有时间亲自测试,但以下步骤应该有效:

  1. 将您的实际core/src/目录移到其他位置,例如~/temp.subrepo/
  2. .hgsub文件
  3. 中删除子信息
  4. 使用Convert extension重命名subrepo中的文件(参见下面的快速示例)
  5. 移植更改:hg transplant -s~ / temp.subrepo.converted / 0:tip
  6. 要转换subrepo,您​​可以使用以下内容:

    $ echo include . > /tmp/myfilemap
    $ echo rename . src/ >> /tmp/myfilemap
    $ hg convert --filemap /tmp/myfilemap ~/temp.subrepo/ ~/temp.subrepo.converted/
    

    就像我说的那样,我不确定这是否可以开箱即用,但它至少是一个领先者。如果您有任何问题,请不要犹豫。

    历史并不重要

    或许最简单的解决方案就是删除子报道中的.hg目录,删除主回购的.hgsub文件中提到的子报表,然后添加并提交文件:

    hg add core/src
    hg commit 
    

    你将失去subrepo的所有历史,但至少解决方案非常简单。