我正在努力使用TortoiseHg正确跟踪嵌套的存储库。

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

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

到目前为止,我已经为每个插件创建了一个新的仓库。我可以提交并轻松地将它们推送到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

我去了应用程序/插件,并在这里从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'所欢迎

当我的子仓库拥有与plugins /目录中Hg已经跟踪的目录相同的名称时,似乎会触发该问题。

我究竟做错了什么 ?我是否应该在插件的.hg中添加/编辑一些特殊内容?

更新
我终于设法使其按我想要的方式工作。
我不得不“手动”告诉Mercurial删除plugins / plugin1,plugins / plugin2目录,提交更改,然后从BitBucket克隆回plugin1和plugin2,将app/plugins/plugin1 = app/plugins/plugin1添加到.hgsub并全部提交。有效。
重要的步骤是在删除plugin1 / plugin2文件夹后提交。

最佳答案

我终于设法使它按我喜欢的方式工作。我在winXP上使用TortoiseHg,因此无法告诉您内部进行了哪些hg调用,但是我认为这里没有花哨的东西。

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

  • 我首先进入plugins/目录,右键单击plugin1/TortoiseHg => Remove Files
  • 我回到仓库的根目录,右键单击并添加Hg Commit
  • 然后返回到plugins/目录,右键单击TortoiseHg => Clone...,在位存储桶(http://bitbucket.org/username/plugin1/上选择了插件的http地址,然后单击Done
  • 再次回到主仓库的根目录。我创建了.hgsub文件(如果文件已经存在,则进行了编辑),并在其中添加了plugins/plugin1 = plugins/plugin1行。
  • 然后,我可以独立提交主root存储库或plugin1存储库

  • 请注意,仅当新克隆的存储库具有与已跟踪目录相同的名称时,才需要执行额外的removecommit步骤。

    10-08 11:09