使用Mercurial / TortoiseHg处理嵌套Hg存储库的正确方法是什么?

时间:2010-03-03 12:53:31

标签: mercurial tortoisehg subrepos

我正在努力研究如何使用TortoiseHg正确跟踪嵌套存储库。

我有一个跟踪整个项目的主存储库。该项目包含几个存储在plugins /子目录中的小插件。

我希望独立跟踪每个插件(为每个插件提交和推送BitBucket),同时仍然可以对我的项目进行“整体”提交,包括对插件所做的更改并将其推送到其他位置(不是BitBucket)。

到目前为止我所做的就是为每个插件创建一个新的repo。我可以轻松地将它们推送到BitBucket。但是当我去提交我的“主”存储库时,TortoiseHg会显示一条错误消息,指出abort: path 'mainrepo\\plugins\\plugin1\\plugin1.php' is inside repo 'mainrepo\\plugins\\plugin1'

我可以看到我做错了什么,但我不知道是什么。

我在WinXP上使用了每晚的Mercurial和TortoiseHg(ToirtoiseHg版本0.9.3 + 237-ea50f793bbe4和Mercurial-1.4.3 + 225-70dea42c9406)。我读到subrepos处理被添加到这个TortoiseHg构建中,但是,我甚至不确定subrepos是我应该在这里使用的功能。

更新
我已经取得了一些进展,但仍然无法按照我喜欢的方式工作 这是我的结构:

-- .hg
-- core
-- app
    -- file.php
    -- file.css
    -- plugins
        -- plugin1
            -- file1.php
        -- plugin2
            -- file2.php

我去了app / plugins,并在这里克隆了一个来自BitBucket的插件(名为plugin3)。然后我在根目录下创建了一个.hgsub文件,并向其添加了app/plugins/plugin3 = app/plugins/plugin3。 然后我就可以提交我的整个目录了。

但后来我尝试从BitBucket获取最新版本的plugin1,所以我去了app / plugins,删除了plugin1 /文件夹并从BitBucket克隆了plugin1。然后我将app/plugins/plugin1 = app/plugins/plugin1添加到了.hgsub,但当我尝试提交时,我遇到了abort: path 'app/plugins/plugin1/file1.php' is inside repo 'app\\plugins\\plugin1'

当我的subrepo与插件/目录中Hg已经跟踪的目录名称相同时,问题似乎就开始了。

我做错了什么?我应该在插件的.hg中添加/编辑特殊内容吗?

更新
我终于设法让它以我想要的方式工作 我必须“手动”告诉Mercurial删除插件/ plugin1,plugins / plugin2目录,提交更改,然后从BitBucket克隆plugin1和plugin2,将app/plugins/plugin1 = app/plugins/plugin1添加到.hgsub并提交全部。它奏效了。
重要的一步是删除了plugin1 / plugin2文件夹后提交。

2 个答案:

答案 0 :(得分:18)

我终于设法让它以我喜欢的方式运作。我在winXP上使用TortoiseHg,所以我无法告诉你内部的hg调用是什么,但我不认为这里有任何花哨的东西。

我从一个现有的repo开始,在其中我有一个plugins/目录,里面有plugin1/plugin/2个目录(不是存储库,只是简单的目录)。 我也有在线的那些插件,托管在BitBucket上。

  • 我首先访问了我的plugins/目录,右键点击plugin1/TortoiseHg => Remove Files
  • 我回到我的仓库的根部,右键单击并Hg Commit
  • 然后我回到我的plugins/目录,右键单击TortoiseHg => Clone...,我在位桶http://bitbucket.org/username/plugin1/上选择了插件的http地址,然后点击了Done < / LI>
  • 再回到主回购的根部。我创建(或编辑文件已存在).hgsub文件并在其中添加plugins/plugin1 = plugins/plugin1行。
  • 然后我能够提交主根目录,或者独立提交plugin1 repo

请注意,仅当新克隆的repo与已跟踪目录的名称相同时,才需要额外的removecommit步骤。

答案 1 :(得分:5)

你应该尝试使用:

  

子存储库是一种允许您将存储库集合视为一个组的功能   这将允许您作为一个组克隆,提交,推送和拉取项目及其关联的库。