mercurial中有没有办法从数据库中删除旧的变更集?我有一个60GB的存储库,这使得克隆非常痛苦.我想在某个日期之前修剪掉所有东西,并把巨大的数据库带走以收集灰尘.
Ger*_*ima 48
没有简单/推荐的方法直接对现有存储库执行此操作.
但是,您可以将您的mercurial仓库"转换"为新的mercurial仓库,并通过convert.hg.startrev选项从中包含历史记录的位置选择修订版本
hg convert --config convert.hg.startrev=1234 <source-repository> <new-repository-name>
Run Code Online (Sandbox Code Playgroud)
新的仓库将包含原始仓库中的所有内容减去起始修订版之前的历史记录.
警告:新的repo将拥有全新的变更集ID,即它与原始仓库没有任何关系.在创建新的repo之后,每个开发人员都必须克隆新的repo并从原始repo中删除它们的克隆.
我用它来清理我们公司内部使用的旧存储库 - 结合--filemap选项来删除不需要的文件.
Ry4*_*ase 28
你可以这样做,但这样做会使所有克隆无效,所以除非你完全独自工作,否则一般都不明智.
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
Run Code Online (Sandbox Code Playgroud)
您可能需要做一些工作来处理合并变更集,但这是一般的想法.
也可以使用hg convert类型hg作为源类型和目标类型,并使用a splicemap,但这可能更多涉及.
更大的问题是,如何键入60GB的源代码,或者是否根据所有建议添加生成的文件.:)