【问题标题】:Which branches are ancestors of a particular changeset in mercurial?哪些分支是 mercurial 中特定变更集的祖先?
【发布时间】:2017-06-29 11:12:53
【问题描述】:

我有一个 mercurial repo,它的分支/合并结构相当复杂。某些分支包含不应推送到主存储库的本地自定义,但这些分支中的某些变更集可能已合并到 default 和/或某些应推送的功能分支。

在我推送特定分支的修订之前,我想知道哪些其他分支(如果有的话)已经贡献了将被拉动的变更集。示例:

feature1 ... o--o--o---o--o--o--o
              \       /    
config         x--x--x--x

如果我推送分支feature1,它也会从分支config 中拉出三个变更集。我可以使用hg outgoing -b branchname destination_repo 预览将要推送的变更集,但是要推送的变更集和分支很多。有没有办法只获取将贡献祖先变更集的分支列表,或者仅获取不属于我指定的命名分支的受影响变更集?

【问题讨论】:

    标签: mercurial


    【解决方案1】:

    只需将hg outgoing 的输出模板化为(仅)提供您需要的信息:

    hg outgoing -T"{rev}: {branch}\n"
    

    或者如果你有 bash,把它压缩到一个分支列表中(tail 是必需的,因为我们想忽略那些状态与哪个 repo 进行比较并且它正在搜索更改的行):

    hg outgoing -T"{branch}\n" | tail -n+3 | sort -u
    

    同样适用于hg incoming。如果您只想拉(或推送)某个版本,请通过 --rev XXX 或 --branch BBB 参数明确给出所需的版本。

    【讨论】:

    • 效果很好,谢谢!我将管道重写为tail -n+3 | sort | uniq -c,这样我还可以获得变更集的计数(并不是说这有什么区别:要么有问题需要人工关注,要么没有。)
    【解决方案2】:

    你可以使用 Tortoise hg https://tortoisehg.bitbucket.io/ 来处理这样的事情。 切换到特定分支并将所做的更改推送到您希望提交的特定分支。


    如果你是在 unix 机器上做这样的事情,那么

    hg shelve --all --name "UnfinishedChanges"
    
    hg update [-c] [-C] [-d DATE] [[-r] REV]
    
    aliases: up, checkout, co
    
    update working directory (or switch revisions)
    
    hg unshelve --name "UnfinishedChanges"

    最后只提交和推送所需的更改。它只会在您更新了工作目录的所需分支中推送该功能。

    【讨论】:

    • 谢谢,但我已经知道如何推送特定的分支。这个答案和我的问题有什么关系?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-16
    • 1970-01-01
    • 1970-01-01
    • 2011-07-19
    • 1970-01-01
    • 2015-01-12
    相关资源
    最近更新 更多