在Mercurial中创建临时命名分支,然后将其从存在中删除

在Mercurial中创建临时命名分支,然后将其从存在中删除,mercurial,branch,teamcity,mercurial-queue,Mercurial,Branch,Teamcity,Mercurial Queue,我想在TeamCity Visual Stuio插件中添加一个“Mercurial远程运行(个人构建)”功能 从v6.5开始,TeamCity支持“远程运行分支触发器”,如果推送与TeamCity中的触发器匹配的命名分支,TeamCity将运行该分支的个人构建 想法是从当前分支(比如说default)获取当前传出的变更集,并将它们移动到名为远程运行的临时命名分支。然后将其推送到CI,从而触发个人生成,如果个人生成成功,则将更改移回原始分支,并删除远程运行分支 关于这一点,我有几个问题: 这有意义

我想在TeamCity Visual Stuio插件中添加一个“Mercurial远程运行(个人构建)”功能

从v6.5开始,TeamCity支持“远程运行分支触发器”,如果推送与TeamCity中的触发器匹配的命名分支,TeamCity将运行该分支的个人构建

想法是从当前分支(比如说
default
)获取当前传出的变更集,并将它们移动到名为
远程运行的临时命名分支。然后将其推送到CI,从而触发个人生成,如果个人生成成功,则将更改移回原始分支,并删除
远程运行
分支

关于这一点,我有几个问题:

  • 这有意义吗
  • 我应该使用哪个分机?我相信MqExtension做了我需要的一切,但是有其他选择吗
  • 如果用户在远程运行期间提交其他更改,会发生什么情况?“临时分支”变更集如何合并回原始分支
  • 我目前的目标场景如下:在处理默认分支时,用户添加了3个新修订。然后,他希望将这些更改作为TeamCity的个人构建运行,但他忘了将这些修订提交给一个专门命名的分支。相反,我的加载项将接受这些传出的更改,并将它们放在命名的分支中。一旦个人构建成功,这些更改就会放回原始(默认)分支,并推送到远程存储库

    大概是这样的:

    [default] A---B---C---D
    
    假设
    B
    C
    D
    是新的修订版,我希望该工具能够执行以下操作:

    [default] A
               \
                [remote-run] B---C---D
    
    完成后,将其恢复到原始状态,即:

    [default] A---B---C---D
    
    编辑:我设法用Mq将更改移动到另一个分支,结果非常简单。不幸的是,我不知道如何恢复此更改:)


    希望这有意义

    成功构建后,您可以让TeamCity标记您的VCS根目录。如果只在默认值上标记每个成功的构建,而不使用单独的分支,这难道不是更有意义吗

    我不确定你的任务背后的动机,你想从哪些具体的工作流程中获益

    关于第3项,无法保证自动合并回到默认状态。如果存在合并冲突,则无论您将什么命令脚本放入“个人构建”的构建配置中,都需要它的帮助才能使您恢复到稳定状态,尤其是“CI”


    很抱歉,我无法在第一次通过时提供更多帮助。

    这正是“hg rebase”命令的作用。在你的情况下使用

    hg rebase -s B -d A --detach
    
    确保使用最新版本(最新夜间版本)。最近修复了一个可能影响此特定情况的bug。 此外,必须启用“rebase”扩展才能正常工作。确保~/.hgrc(或mercurial.ini)文件中有以下行:

    编辑:我似乎回答了一个相反的问题(如何删除本地分支)。要创建新的命名分支并将B、C、D修订版导入其中,需要以下命令序列:

    hg qimport -r tip:B       #Revisions B,C,D will be imported into mq
                              #(here B is revision id of the "B" commit)
    hg qpop --all             #Unapply all patches
    hg branch remote-run      #Create a new branch
    hg qpush --all            #Push patches into the new branch
    hg qfinish -a             #Transform applied patches to regular commits
    

    注:1<代码>hg分支-f
    必须用于第二次和下一次运行。2.我不确定qpush是否能创造出真正的brach
    hg qimport -r tip:B       #Revisions B,C,D will be imported into mq
                              #(here B is revision id of the "B" commit)
    hg qpop --all             #Unapply all patches
    hg branch remote-run      #Create a new branch
    hg qpush --all            #Push patches into the new branch
    hg qfinish -a             #Transform applied patches to regular commits