Version control hg Repo之间以托管方式共享文件

Version control hg Repo之间以托管方式共享文件,version-control,mercurial,Version Control,Mercurial,问题:一个hg存储库中有一个我想在另一个hg存储库中更新和维护的文件,我不想复制和粘贴。我确实希望该文件在两种回购协议中都可用 情景: 处理产品0001 项目A有一个hg存储库 沿着这条路,一个项目B开始了。基本上没有耦合 在项目A和B之间,但有些文件可能 共享 以托管方式控制文件的版本至关重要:复制& 粘贴不是一个可行的解决方案 有一些解决方案可能有效- 将两个回购合并为产品回购。但是,这意味着一组文件的版本号将因其他地方的搅动而改变。另外,不同的项目之间没有太大的关联 将两者转换为子回购。

问题:一个hg存储库中有一个我想在另一个hg存储库中更新和维护的文件,我不想复制和粘贴。我确实希望该文件在两种回购协议中都可用

情景:

处理产品0001

项目A有一个hg存储库

沿着这条路,一个项目B开始了。基本上没有耦合 在项目A和B之间,但有些文件可能 共享

以托管方式控制文件的版本至关重要:复制& 粘贴不是一个可行的解决方案

有一些解决方案可能有效-

  • 将两个回购合并为产品回购。但是,这意味着一组文件的版本号将因其他地方的搅动而改变。另外,不同的项目之间没有太大的关联
  • 将两者转换为子回购。我不确定这是不是正确的方法,次级回购似乎有一些与母回购相关的古怪行为。(或者他们过去是吗?)
扩展此问题的是在产品之间共享某些文件的概念。不知何故,一个文件需要作为一个单独的文件进行共享和正确跟踪,但在两个不同的产品中

一般问题可以这样表述:

给定一组产品,每个产品都有自己的存储库,正在开发中,这些产品共享和开发彼此存储库中的文件(想想实用程序例程和框架),在产品之间保持文件版本一致性的hg解决方案是什么


这里有什么好的解决方案?

您的第二次呼叫是正确的。您应该提取两个存储库中的文件,并将其作为第三个repo,然后为项目a和项目B中的每一个创建子repo

我不知道你是什么时候第一次看到次级回购协议的,但它们已经存在了一年,并且得到了很好的支持

阅读这里有关堆栈溢出的一些与子回购相关的答案,确保子回购路径是相对的(而不是绝对的w/http://etc),它们会对您很好

更新:

今天的mercurial 1.7版包括以下针对次级回购的增强功能:

  • 支持子存储库源路径的重新映射(请参阅hgrc(5)中的[子路径])
  • 使用
    --subrepos/-S
  • subrepo:添加对“hg存档”的支持
  • 子回购:修复SVN子回购的状态检查(问题2445)

说差别和地位对次级回购一无所知。此外,这表明次级回购仍处于严重的“半生不熟”阶段。这意味着差异和状态不会下降到您的子存储库中,但这很少是您真正想要的,也永远不会是默认的。Subrepo在许多组织中被广泛使用,而且只会不断增长。Sun在ForestExtension上构建了NetBeans repos,这总是违背建议,但subrepos将继续存在,并为黄金时间做好准备。@Ry4an:我不相信非递归差异和状态不是我想要的。这很公平。目标是针对次级回购协议的固定修订进行开发,而不是针对其尖端——次级回购协议是为了便于更新,而不是共同开发。我仍然看到人们在$(find$(hg root)中为therepo创建了一个别名,如:
rdiff=d-name.hg | xargs-l dirname);do hg——存储库$therepo diff;做了这会提供递归的差异(或状态或传出),并且如果你在这种事情上就足够容易了。保罗,即使在这种情况下,大多数人都认为有一个连续的集成服务器,它每天都会压缩一个构建的/标签的发布,并与此建立最佳的实践。您总是希望能够说‘此二进制文件是根据库版本2010.10.27.0029构建的’而不是‘此二进制文件是根据我当前工作目录中的任何内容构建的’。如果你像这样设置你的工作流程,你可以获得所有的灵活性,并行开发,以及根据可识别的版本进行严格的构建。