我正在努力使用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
行。 请注意,仅当新克隆的存储库具有与已跟踪目录相同的名称时,才需要执行额外的
remove
和commit
步骤。