2011-09-19 168 views
1

我有多个模块,每个模块都在其自己的存储库中。 然后有一个框架,它有一些基本的代码,这对所有的客户端都是通用的,并且总是包含一些模块的子集。在Mercurial中为多个类似项目使用框架

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

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

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

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

您有什么建议?

+0

你想把它作为一个起点,还是作为保持不变的模块/包? –

+0

骨架应该是新项目的基础,所以是一个起点。在克隆骨架之前,开发人员应该在子库(模块)中进行更改,以便骨架总是up2date。将来,我们可能需要为非向后兼容的事物分支骨架,但我们还没有在那个阶段。 –

+0

如果您可以避免更改零件,使用子库会变得更容易,但是如果您需要更改零件的骨架,则会遇到问题。我仍然不完全了解你的问题的细节。 –

回答

1

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

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

skeleton回购得到了client-a克隆,然后用水银

[paths] 
default = http://hg.server/repos/skeleton 

创建client-a/.hg/hgrc所以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 push和如果您尝试混合来自不同客户端的变更集,则hg pull将会出错。

相关问题