gpt4 book ai didi

Mercurial:在 bundle 中包含 secret 变更集?

转载 作者:行者123 更新时间:2023-12-04 15:02:35 26 4
gpt4 key购买 nike

使用 Mercurial,我如何 bundle 所有不知道在另一个存储库中的变更集,包括 secret 变更集?

我知道bundle--base选项恰好包含 secret 变更集,但我不想要 --base行为。 (而且, secret 变更集总是包含在 --base 中,但没有它就永远不会包含在内,这似乎异常奇怪。不应该有一个单独的选项吗?)

仅供引用,我通常希望在尝试重写潜在危险的历史记录之前备份仅在我的本地存储库中的所有变更集。

最佳答案

你是对的 hg bundle通常会排除 secret 变更集。这是因为它只是运行相当于 hg outgoing并 bundle 这些变更集。

所以一些解决方法:

  • 如果您知道您至少有一个草稿或公共(public)传出变更集作为您的 secret 变更集的祖先,那么您可以使用
    $ hg bundle --base "parents(outgoing())"

    得到你想要的。 outgoing() revset 将选择缺失的草稿和公共(public)变更集和 parents(outgoing()将是合适的基地。由于您使用 --base您可以从这些基地获得所有后代(公共(public)、草稿和 secret )。
  • 您可以暂时将您的 secret 变更集草稿、 bundle ,然后再次将它们标记为 secret :
    $ secret=$(hg log --template "{rev} " -r "secret()"); \
    hg phase -d $secret; \
    hg bundle out.hg; \
    hg phase -f -s $secret

    (我使用 Zsh,我不得不使用 ${=secret} 而不是 $secret,因为默认情况下 Zsh 不对参数扩展进行分词。)

    使用 ; 链接命令很重要而不是 &&因为无论 hg bundle 中发生什么,您都希望重置阶段。 call — 将错误的参数传递给 hg bundle不应该意味着您丢失了有关 secret 变更集的所有信息。另请注意,由于 secret 变更集只有 secret 后代,因此这种技术不会丢失信息。

    您可以将其转换为 shell 别名:
    [alias]
    bundle-all = !secret=$(hg log --template "{rev} " -r "secret()");
    hg phase -d $secret;
    hg bundle $@;
    hg phase -f -s $secret
    $@在调用别名之前由 Mercurial 扩展,这允许您为 hg bundle 插入必要的参数.

  • 请注意,阶段信息不能存储在 bundle 中—— bundle 格式没有更改以适应它。

    关于Mercurial:在 bundle 中包含 secret 变更集?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9637984/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com