在Mercurial中为多个类似项目使用框架
问题描述:
我有多个模块,每个模块都在其自己的存储库中。 然后有一个框架,它有一些基本的代码,这对所有的客户端都是通用的,并且总是包含一些模块的子集。在Mercurial中为多个类似项目使用框架
在新客户端上使用此设置的最佳方式是什么?
我现在遇到的问题是: - 如果我克隆骨架,然后在骨架中添加一些内容并将其推送到服务器,骨架将得到更新。
如果我为克隆骨架的客户端每个项目都有一个存储库,则会发生同样的情况:骨架中的更改被推送到框架。
现在,我可以通过克隆骨架,然后立即为骨架中的客户端创建一个新的分支来解决这个问题,但是我更喜欢它是否有自己的存储库以便传递到服务器,而不是分支的骨架(我想用于骨架版本,而不是项目)。
您有什么建议?
答
如果我理解正确,缺少的信息是您可以在制作克隆后更改默认推送路径。当您运行
$ 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-a
和client-b
有着共同的祖先skeleton
存储库。出于这个原因,我会简单地复制框架文件并将它们重新到每个客户端库:
$ unzip skeleton.zip
$ rm skeleton.zip
$ hg add
$ hg commit -m "Initialized repository for client-a"
由于日期和提交信息会有所不同为每个客户端,该库将成为无关和hg push
和如果您尝试混合来自不同客户端的变更集,则hg pull
将会出错。
你想把它作为一个起点,还是作为保持不变的模块/包? –
骨架应该是新项目的基础,所以是一个起点。在克隆骨架之前,开发人员应该在子库(模块)中进行更改,以便骨架总是up2date。将来,我们可能需要为非向后兼容的事物分支骨架,但我们还没有在那个阶段。 –
如果您可以避免更改零件,使用子库会变得更容易,但是如果您需要更改零件的骨架,则会遇到问题。我仍然不完全了解你的问题的细节。 –