22

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

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

我很想独立跟踪每个插件(为每个插件提交并推送到 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

我去了应用程序/插件,并在这里从 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 与 plugins/ 目录中 Hg 已跟踪的目录具有相同的名称时,问题似乎触发了。

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

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

4

2 回答 2

18

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

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

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

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

于 2010-03-05T11:51:26.220 回答
5

您应该尝试使用:

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

于 2010-03-03T14:44:07.720 回答