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

pix*_*tic 22 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
Run Code Online (Sandbox Code Playgroud)

我去了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删除plugins/plugin1,plugins/plugin2目录,提交更改,然后从BitBucket克隆plugin1和plugin2,添加app/plugins/plugin1 = app/plugins/plugin1到.hgsub并提交全部.有效.
删除plugin1/plugin2文件夹后,重要的一步是提交.

pix*_*tic 18

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

我开始与现有的回购协议,这里面我有一个plugins/充满了目录plugin1/,plugin/2目录(而不是存储库,只是简单的目录).我也有在线的那些插件,托管在BitBucket上.

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

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


Von*_*onC 5

你应该尝试使用:

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