2009-12-30 93 views
3

这可能不是Mercurial独有的问题,但这是我最近一直使用的SCM。人们如何管理多个(Mercurial)存储库中存储的常见库文件的更改?

我在多个项目上工作,倾向于复制以前项目的库或实用程序的源代码,以便启动新项目。当我想将我在最新项目中所做的所有更改合并到这些共享库文件的“主”副本中时,问题就出现了。

由于存储在不相关存储库中的文件将具有不同的版本历史记录,因此如果我只是将文件复制回主库(甚至在两个独立项目之间),Mercurial将无法执行智能合并。

我正在寻找一种简单的方法来保存更改历史记录,以便我可以将库文件合并到最少外部记录的主文件夹中(这是我使用SVN的原因之一,因为合并需要记住副本是否跨分支)。

也许我需要对我的存储库做更多的预先组织工作,以便为将来的合并准备回到共同的主服务器上。

回答

5

三种解决方案,挑选自己喜欢的:

  1. 把所有的项目到一个存储库。
  2. 为每个项目创建一个单独的共享代码库和不同的存储库。
  3. 一个存储库包含子库:https://www.mercurial-scm.org/wiki/subrepos,将所有通用代码保存在一个子文件中,并为每个项目保存不同的子文件。

在没有共同祖先的存储库之间复制实际文件将永远不会最佳,因为历史记录不会保留。

+0

感谢您的快速响应。 1.不实际 - 使用这些不同存储库的成员(人员)是不同的。 2.我想单个回购包含每个项目所需的所有代码。这似乎排除了2. 3.我看到了这个“实验性”功能 - 人们真的在使用它吗?它是否稳定/推荐? 这似乎是一个很常见的问题,我希望有一些标准的做法,我错过了。 – mckoss 2009-12-30 18:06:43

+1

Subrepos用于生产。 – tonfa 2009-12-30 18:10:06

+0

它在1.3的实验中,当前版本是1.4.x – 2010-01-13 10:02:25

-2

使用移植扩展

+0

Yuck。然后,你有不同的哈希(由于他们不同的父母)的地方相同的变化。 – 2009-12-30 20:55:41

1

我建议你对你的“复制源代码”的做法,但使用二进制分发版为您的自定义库代替。这些二进制文件是沿着源代码签入的。

  • 减少建造时间
  • 没有跟踪变化开销库
  • 你可以使用不同版本的不同项目中的同一个库的所有副本。

编辑:而对于“普通”或“工具箱”库的问题一般来说,阅读从ayende this post

+0

就我而言,这是最好的选择。让您的持续集成构建系统每天(或每次更改或其他内容)创建一个新的公共代码版本,并让您的项目使用这些库直接从构建框下载/使用它们。 在内部我/我们使用'ivy'(我们是一个java商店)来简单列出我们的内部和外部依赖关系,并为我们节省了各种麻烦。 – 2009-12-30 20:57:48

+0

我不认为这对我来说效果很好,因为它将项目联系得太紧密。请注意,在分发库之前,您需要在使用库的所有项目中运行所有单元测试,以便安全地执行此操作。 – mckoss 2009-12-31 14:16:11

+0

对不起,我不明白。它为什么要结合这些项目?我的一个重点是能够针对不同的项目使用不同的版本。分发时运行所有单元测试?如果使用源代码发布有什么不同? – 2009-12-31 14:41:52

相关问题