在保留历史记录的同时公开提供存储库的子集

时间:2010-10-27 09:12:52

标签: version-control mercurial

我在版本控制下使用了一些代码(使用mercurial),并希望分享其中一些代码,同时隐藏其他部分,我无法释放到公共领域(至少在此阶段)。

我希望保持公共代码的修订历史不变,更重要的是,能够在公共存储库和包含公共代码和私有代码的存储库之间进行推/拉变更。但是,不应该从公共存储库历史记录中恢复任何私人信息。

从我到目前为止所收集的信息来看,应该可以使用<{>} hg convertfilemap来提取公共内容并排除,尽管这会改变所有修订ID并排除两个存储库之间的任何交互。

为了完整性,我想我应该补充说,存储库最初是从cvs转换而来。

会对任何想法表示感激,

2 个答案:

答案 0 :(得分:3)

这并不总是实用,但如果您的回购的公共部分可以被限制(或移动到)当前回购的子目录,那么您可以:

  • 提取(例如,像你提到的那样,hg convert)该子目录中的子目录
  • 将新回购参考为主仓库的subrepo

然后您将管理两个回购:

  • 一个公共(只有公共文件)
  • 一个私人(参考公众回购作为子目录)

答案 1 :(得分:0)

如果您可以使用subrepos,这可能是最好的方法,但使用convert无需排除各个部分之间的互动。如果公共和私有内容完全不相交,请使用convert将原始仓库拆分为两个完全不相交的子集(重新生成所有变更集ID),然后通过克隆一个来重新创建“超集”仓库并拉动另一个(使用--force来克服hg对不相关的存储库的反对意见)。你最终会得到一个稍微不同寻常的回购,它有两个无父变换集和两个头。合并头部,你再次对公共和私人有统一的看法,公共回购的祖先有效地在自己的分支上。