人们如何管理存储在多个(Mercurial)存储库中的公共库文件的更改?

时间:2009-12-30 17:48:45

标签: version-control mercurial merge

这可能不是Mercurial特有的问题,但那是我最近一直在使用的SCM。

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

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

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

也许我需要对我的存储库进行一些更多的预先组织,以便为将来的合并做准备回到公共主人。

3 个答案:

答案 0 :(得分:5)

三种解决方案,选择你最喜欢的:

  1. 将所有项目放入一个存储库。
  2. 为每个项目为共享代码和不同存储库创建单独的存储库。
  3. 一个包含子库的存储库:https://www.mercurial-scm.org/wiki/subrepos,将所有公共代码保存在每个项目的一个子库和不同的子库中。
  4. 在没有共同祖先的存储库之间复制实际文件将永远不会是最佳的,因为历史记录不会被保留。

答案 1 :(得分:1)

我建议不要使用“复制源代码”练习,而是使用二进制分发代替自定义库。这些二进制文件沿源代码签入。

  • 缩短构建时间
  • 跟踪库的所有副本中的更改没有开销
  • 您可以在不同的项目中使用同一个库的不同版本。

编辑:对于“普通”或“工具箱”库的问题,请阅读ayende的this post

答案 2 :(得分:-2)

使用移植扩展