我正在努力研究如何使用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
我去了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删除插件/ plugin1,plugins / plugin2目录,提交更改,然后从BitBucket克隆plugin1和plugin2,将app/plugins/plugin1 = app/plugins/plugin1
添加到.hgsub并提交全部。它奏效了。
重要的一步是删除了plugin1 / plugin2文件夹后提交。
答案 0 :(得分:18)
我终于设法让它以我喜欢的方式运作。我在winXP上使用TortoiseHg,所以我无法告诉你内部的hg调用是什么,但我不认为这里有任何花哨的东西。
我从一个现有的repo开始,在其中我有一个plugins/
目录,里面有plugin1/
,plugin/2
个目录(不是存储库,只是简单的目录)。
我也有在线的那些插件,托管在BitBucket上。
plugins/
目录,右键点击plugin1/
,TortoiseHg => Remove Files
。Hg Commit
plugins/
目录,右键单击TortoiseHg => Clone...
,我在位桶http://bitbucket.org/username/plugin1/
上选择了插件的http地址,然后点击了Done
< / LI>
.hgsub
文件并在其中添加plugins/plugin1 = plugins/plugin1
行。请注意,仅当新克隆的repo与已跟踪目录的名称相同时,才需要额外的remove
和commit
步骤。
答案 1 :(得分:5)
你应该尝试使用:
子存储库是一种允许您将存储库集合视为一个组的功能 这将允许您作为一个组克隆,提交,推送和拉取项目及其关联的库。