2010-10-27 14 views
2

我已经得到了版本控制下的一些代码(使用水银),并想和大家分享一些吧,同时隐藏着我无法释放进入公有领域的其他部分(至少在这个阶段)。制作资源库的一个子集公之于众,同时保持历史

我非常喜欢,让市民代码的修订历史记录完整,而且,更重要的是,能够推/拉的公共仓库,以及包含公共和私人的代码存储库之间的变化。但是,它不应该可以从公共存储库历史中恢复任何私人信息。

从我目前为止收集到的,它应该是可以提取使用hg convertfilemap和不包括公共的东西,虽然这将改变所有的版本编号和排除这两个仓库之间的任何互动。

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

将是任何想法感谢,

+0

刚刚意识到这比我想象的要复杂得多 - 因为我有一些在同一文件中设置了“私人”和“公共”源代码的例子。怀疑最安全的选择可能是放弃保存公共存储库的历史记录,并且只用重构的资源创建一个新的存储库。尽管如此,仍然希望能够在两个存储库之间推/拉任何新的更改。 – user488551 2010-10-28 07:53:18

回答

3

它并不总是可行的,但如果你的回购的公共部分可以被限制(或移动到)到您当前回购的子目录,然后你可以:

  • 提取物(含比如,像你提到的,hg convert)在自己的
  • 基准的回购该子目录新回购作为subrepo你的主回购。

然后,您可以管理两个回购:

  • 一个公共(只有在它的公共文件)
  • 一个私有的(与参考公众回购作为subrepo)
+0

+1单独的回购 – sylvanaar 2010-10-27 12:02:54

+0

谢谢,不幸的是,它看起来不会那么容易。大部分的代码应该公开,但是私人位现在分散在各处。这是因为我按功能安排了代码,而不是考虑可能最终会被公开/私下化的问题。将尝试并考虑重新排列公共和私人位的方式,但这可能会很棘手。 – user488551 2010-10-27 19:32:34

+0

@ user488551:是私有的“比特”码吗?或配置敏感或特定数据的文件? – VonC 2010-10-27 20:00:43

0

如果你可以使用subrepos,这可能是最好的方法,但使用convert不必排除部分之间的相互作用。如果公共和私人的东西是完全不相交的,请使用convert将原始回购拆分为两个完全不相交的子集(重新生成所有变更集ID),然后通过克隆一个和拉动另一个(使用--force来克服重新创建“超集”回购hg反对不相关的存储库)。你最终会得到一个非传统的回购协议,它有两个无父母变更集和两个头。合并团长,再次对公共和私人进行统一的观点,公共回购的血统有效地在其自己的一个分支上。

+0

完全不相交的意思是什么?我目前的计划是从公共存储库中清除历史记录(即使用公共子集的源创建一个新的存储库)。如果我可以从这里拉(从 - )到私人存储库,这将有相同的所有公共文件的副本,以及他们的历史,我可能会在商业中。这样我只能保留私人回购中的(预先拆分)历史记录,但这应该足以让我们能够回过头去找到哪里有错误。 – user488551 2010-10-28 08:01:57

+0

对不起,“不相交”的含义很模糊。我的意思是,如果你的公共代码都是与所有私有代码不同的文件。如果是这样的话,那么你可以使用'filemap'来将两个片断完全分开,而不再将它们的祖先混合在一起(即每个变更集只涉及公共和私人之一,而不是两者)。私人回购没有自己的公共文件副本(在不同的变更集意义上);你可以先把私人资料转换成它自己的回购资料,然后把公共资料回收并合并。将添加一个例子给我的答案。 – shambulator 2010-10-28 08:23:58

+0

啊,刚才看到你的评论是关于在相同的文件中混入公有和私有代码。我认为@VonC是对的;故意重构比尝试拆分回购更好,然后不得不重构破坏事物。 – shambulator 2010-10-29 11:24:02

相关问题