【问题标题】:Does Mercurial push all local branches or only the working branch?Mercurial 是推送所有本地分支还是只推送工作分支?
【发布时间】:2019-06-05 12:04:08
【问题描述】:

当我有 3 个这样的分支时:

  • feature/my-branch-1
  • feature/my-branch-2
  • feature/my-branch-3

我正在开发feature/my-branch-1

一旦我跑了

hg push

我是推送所有这 3 个分支还是只推送工作分支 (feature/my-branch-1)?

【问题讨论】:

    标签: mercurial


    【解决方案1】:

    默认情况下,它将推送所有尚未在目标存储库中的分支上的任何变更集。

    您可以使用-b 选项仅推送选定的分支:

    # hg push --help
    hg push [-f] [-r REV]... [-e CMD] [--remotecmd CMD] [DEST]
    
    push changes to the specified destination
    
        Push changesets from the local repository to the specified destination.
    ...
    options ([+] can be repeated):
    
    ..
     -b --branch BRANCH [+]     a specific branch you would like to push
    ..
    

    注意 1:如果您使用 phases,则专门 push 将查找不在目标位置的任何 draftpublic 更改,并仅推送这些更改。它不会推送任何 secret 变更集。一旦它们被推送,草稿变更集的阶段就会更改为公开。

    (您可能有未推送的公共变更集 - 例如,如果您明确将它们的阶段标记为公共,或者如果您在之前没有使用过它们时转换为使用阶段。)

    重点是,如果您想控制推送哪些变更集,阶段是一个不错的选择。您可以将所有内容默认设置为机密,并且只有在准备好后才手动将内容标记为草稿。这意味着您始终可以安全地提交,而不会冒着推送未准备好的东西的风险。

    # hg phase --help                                                               
    hg phase [-p|-d|-s] [-f] [-r] [REV...]                                          
    
    set or show the current phase name                                              
    ...                                                                                
    options ([+] can be repeated):                                                  
    
     -p --public      set changeset phase to public                                 
     -d --draft       set changeset phase to draft                                  
     -s --secret      set changeset phase to secret                                 
     -f --force       allow to move boundary backward                               
     -r --rev REV [+] target revision
    

    注意 2:在少数情况下,推送可能会以特殊方式运行。

    如果您有多个头在同一个分支上,那么通常默认情况下,Mercurial 会抱怨并且不会推送任何内容。 (这可能不是 OP 询问的确切场景,但它在拓扑上非常相似。)在这种情况下,每个额外的头都是一个“匿名分支”。

    默认情况下,push 不允许在目的地创建新的 head, 因为多个磁头会导致不清楚使用哪个磁头。

    如果您确实需要,可以“使用 -f/--force 选项来推动多个头,这将推动所有分支上的所有新头”它建议“几乎总是会导致 让合作者感到困惑”

    第二种情况是,如果您要推送的分支在目标中尚不存在。 Hg 将需要额外的轻推来推动该分支:

    如果你想允许 push 创建一个新的命名分支,请使用 --new-branch 目的地不存在。这允许您只创建一个 新分支而不强制进行其他更改。

    (来自hg push --help的文本sn-ps)

    【讨论】:

      猜你喜欢
      • 2016-12-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-22
      • 1970-01-01
      • 2011-06-12
      • 1970-01-01
      相关资源
      最近更新 更多