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

发布于 2024-09-28 04:06:05 字数 36 浏览 3 评论 0原文

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

How can I shrink a mercurial repository by removing old changesets?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

时光磨忆 2024-10-05 04:06:05

从根本上来说,你不能。 Mercurial 有一条严格的规则,即只有当某个变更集的每个祖先变更集也存在于该存储库中时,该变更集才能存在于该存储库中。

但是,您可以创建一个新存储库,其变更集对应于另一个存储库中后续变更集的子集。然而,它们不会是相同的变更集,因为它们将具有不同的哈希节点 ID,并且原始存储库中的任何克隆都无法与新存储库一起使用(“不相关的存储库”)。

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

hg -R /path/to/bigrepo export 10:tip > latestchanges.patch
hg init newsmallrepo
hg -R newsmallrepo import < latestchanges.patch

这将仅将编号为 10 及之后的变更集复制到新存储库中具有不同哈希值的新变更集中。它对于合并也不会很好地工作。

Fundamentally, you can't. Mercurial has a hard and fast rule that a changeset can only exist in a repository if every one of its ancestor changesets also exists in that repository.

You can, however, create a new repository whose changesets correspond to a subset of the later changesets in another repository. They won't, however be the same changesets, because they'll have different hash nodeids, and any clones from the original repo won't work with the new one ("unrelated repositories").

You could try to create a new repo reflecting only some of newer changesets in another repo using a process like this:

hg -R /path/to/bigrepo export 10:tip > latestchanges.patch
hg init newsmallrepo
hg -R newsmallrepo import < latestchanges.patch

That would copy only the changesets numbered 10 and later into new changesets with different hashes in the new repository. It also won't work terribly well with merges.

风月客 2024-10-05 04:06:05

请参阅 convert 扩展(包含在 Mercurial 中)。一个简单的示例如下:

hg convert <src> <dest> --config convert.hg.startrev=<rev>

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

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

[extensions]
convert =

运行 hg help Convert 获取选项。

See the convert extension (included with Mercurial). A simple example is the following:

hg convert <src> <dest> --config convert.hg.startrev=<rev>

This will generate a new, unrelated repository that starts with the revision specified, dropping previous history. It will handle merges as well. All users will need to clone the new version of the repository, since changeset hashes will all change.

Enable the extension by adding the following to mercurial.ini:

[extensions]
convert =

Run hg help convert for options.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文