在Mercurial中使用Skeleton进行多个类似的项目

时间:2011-09-19 10:44:11

标签: mercurial branch

我有多个模块,每个模块都在自己的存储库中。 然后是一个骨架,它有一些对所有客户来说都很常见的基本代码,以及一些总是包含在内的模块的子库。

在新客户端上使用此设置的最佳方法是什么?

我目前遇到的问题是: - 如果我克隆骨架然后在骨架中添加一些内容并将其推送到服务器,则骨架会更新。

如果我为我克隆骨架的客户端的每个项目都有一个存储库,则会发生同样的事情:骨架中的更改会被推送到骨架。

现在,我可以通过克隆骨架然后立即为骨架中的客户端创建一个新分支来修复此问题,但我更喜欢它是否有自己的存储库来传递到服务器,而不是骨架(我想用于骨架版本,而不是项目)。

你有什么建议?

1 个答案:

答案 0 :(得分:1)

如果我理解正确,那么缺少的信息是您可以在进行克隆后更改默认推送路径。当你运行

$ hg clone http://hg.server/repos/skeleton client-a

client-a repo获取skeleton克隆,然后Mercurial使用

创建client-a/.hg/hgrc
[paths]
default = http://hg.server/repos/skeleton

所以hg push现在将变更集发送到该存储库。您应该在服务器上创建一个新的克隆:

$ hg clone skeleton client-a

然后在你的机器上克隆它:

$ hg clone http://hg.server/repos/client-a

对框架代码的更改将不再自动传播到服务器上的skeleton仓库。

一个重要的缺点是,所有客户端存储库都将“兼容”这意味着您可以意外地执行此操作:

$ cd client-a
$ hg pull http://hg.server/repos/client-b

这可行,因为client-aclient-b共享skeleton存储库中的共同祖先。出于这个原因,我只需复制骨架文件并将它们重新添加到每个客户端存储库中:

$ unzip skeleton.zip
$ rm skeleton.zip
$ hg add
$ hg commit -m "Initialized repository for client-a"

由于每个客户端的日期和提交消息都不同,因此存储库将变为无关,如果您尝试混合变更集,hg pushhg pull将会出错来自不同的客户。