删除更改集或缩小Mercurial存储库

Joh*_*ler 8 mercurial

如何通过删除旧的更改集来缩小mercurial存储库?

Ry4*_*ase 13

从根本上说,你不能.Mercurial有一条硬性规则,即如果变量集中的每个祖先变更集都存在于该存储库中,则变更集只能存在于存储库中.

但是,您可以创建一个新的存储库,其更改集对应于另一个存储库中更高版本集的子集.然而,它们不会是相同的更改集,因为它们将具有不同的散列节点,并且来自原始repo的任何克隆将不能与新的("不相关的存储库")一起使用.

您可以尝试使用以下过程创建一个新的仓库,仅反映另一个仓库中的一些较新的变更集:

hg -R /path/to/bigrepo export 10:tip > latestchanges.patch
hg init newsmallrepo
hg -R newsmallrepo import < latestchanges.patch
Run Code Online (Sandbox Code Playgroud)

这样只会将编号为10及更高版本的变更集复制到新存储库中具有不同哈希值的新变更集中.它对合并也不会很好.


Mar*_*nen 11

查看convert扩展(Mercurial附带).一个简单的例子如下:

hg convert <src> <dest> --config convert.hg.startrev=<rev>
Run Code Online (Sandbox Code Playgroud)

这将生成一个新的,不相关的存储库,该存储库以指定的修订开始,删除以前的历史记录.它也将处理合并.所有用户都需要克隆新版本的存储库,因为更改集哈希值将全部更改.

通过添加以下内容来启用扩展mercurial.ini:

[extensions]
convert =
Run Code Online (Sandbox Code Playgroud)

运行hg help convert选项.