代码之家  ›  专栏  ›  技术社区  ›  pixelastic

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

  •  22
  • pixelastic  · 技术社区  · 16 年前

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

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

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

    到目前为止,我所做的是为每个插件创建一个新的repo。我可以很容易地承诺和推动他们。但当我提交“主”存储库时,TortoiseHg显示一条错误消息,说 abort: path 'mainrepo\\plugins\\plugin1\\plugin1.php' is inside repo 'mainrepo\\plugins\\plugin1' .

    我能看出我做错了什么,但我说不清。

    我每晚都在WinXP上使用Mercurial和TortoiseHg(ToItoiseHg版本0.9.3+237-EA50F793BE4和Mercurial-1.4.3+225-70DEA42C9406)。我读到这个TortoiseHg构建中添加了子报告处理,但是,我甚至不确定子报告是否是我应该在这里使用的特性。

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

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

    我去了app/plugins,在这里从bitback克隆了一个插件(名为plugin3)。然后我在根目录下创建了一个.hgsub文件并添加了 app/plugins/plugin3 = app/plugins/plugin3 对它。 然后我可以提交整个目录。

    但后来我试图从BitBucket中获取Plugin1的最新版本,于是我去了app/plugins,删除了plugin1/文件夹,并从BitBucket中克隆了plugin1。然后我补充说 app/plugins/plugin1 = app/plugins/plugin1 但是当我试图承诺的时候,我受到了欢迎 abort: path 'app/plugins/plugin1/file1.php' is inside repo 'app\\plugins\\plugin1'

    当我的子报告与插件/目录中的hg已经跟踪的目录同名时,问题似乎就出现了。

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

    更新
    我终于设法让它按我想要的方式工作。
    我不得不“手动”告诉mercurial删除plugins/plugin1、plugins/plugin2目录,提交更改,然后从bitback中克隆plugin1和plugin2,添加 app/plugins/plugin1=app/plugins/plugin1 发送给.hgsub并提交所有。它奏效了。
    重要步骤是在删除plugin1/plugin2文件夹后提交。

    2 回复  |  直到 16 年前
        1
  •  18
  •   pixelastic    16 年前

    我终于按自己喜欢的方式把它做好了。我在WinXP上使用的是TortoiseHg,所以我不能告诉你Hg的内部调用是什么,但我认为这里没有任何花哨的地方。

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

    • 我第一次去我的 插件/ 目录,右键单击 插件1 , TortoiseHg => Remove Files .
    • 我回到回购协议的根目录,右键单击并 Hg Commit
    • 然后我回到我的 插件/ 目录,右键单击, TortoiseHg => Clone... ,我选择了位bucket上插件的http地址。( http://bitbucket.org/username/plugin1/ 点击 Done
    • 再回到主回购的根部。我创建(或编辑,如果文件已经存在)一个 .hgsub 文件并添加 plugins/plugin1 = plugins/plugin1 在里面排队。
    • 然后,我可以提交主根repo,也可以独立提交plugin1 repo。

    注意,额外的 remove 和 commit 仅当新克隆的repo与已跟踪目录同名时,才需要执行步骤。

        2
  •  5
  •   VonC    16 年前

    您应该尝试使用:

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

    推荐文章