Mercurial删除历史

mercurial有没有办法从数据库中删除旧的变更集? 我有一个60GB的存储库,这使得克隆非常痛苦。 我想在某个date之前把所有东西都剪掉,把大量的数据库收集起来收集灰尘。

你可以这样做,但是这样做会使所有的克隆无效,所以除非你完全独立工作,否则一般都不明智。

mercurial中的每个变更集都由哈希码唯一标识,哈希码是源代码更改,元数据以及其一个或两个父项的哈希值的组合。 这些家长需要一直回到项目的开始阶段。 (没有这个限制的是浅层克隆,但是还没有)。

如果你可以改变新的变更集的哈希值(它再次打破所有的克隆),你可以使用这些命令;

hg export -o 'changeset-%R.patch' 400:tip # changesets 400 through the end for example cd /elsewhere hg init newrepo cd newrepo hg import /path/to/the/patches/*.patch 

您可能需要做一些工作来处理合并变更集,但这是一般的想法。

我们也可以使用hg converttypeshg作为源和目标types,并使用splicemap ,但这可能更多。

更大的问题是,如何input60GB的源代码,或者是否针对所有的build议添加生成的文件。 🙂

没有简单/推荐的方法直接对现有的存储库进行此操作。

然而,你可以将你的mercurial repo“转换”成一个新的mercurial repo,并且通过convert.hg.startrev选项从以前的版本中select一个修订版本

 hg convert --config convert.hg.startrev=1234 <source-repository> <new-repository-name> 

新的回购将包含从原始回购减去历史上的开始修订的一切。

警告:新的回购将具有全新的变更ID,即与原始回购没有任何关系。 创build新的回购后,每个开发人员必须克隆新的回购,并从原始回购删除他们的克隆。

我用这个来清理我们公司内部使用的旧回购站 – 结合–filemap选项去除不需要的文件。