我很想在TeamCity Visual Stuio插件中添加“Mercurial远程运行(个人构建)”功能。
从v6.5开始,TeamCity支持“远程运行分支触发器”,如果推送了与TeamCity中的触发器匹配的命名分支,则TeamCity将运行该分支的个人构建。
这个想法是从当前分支获取当前的传出变更集(比如说default
),并将它们移动到名为remote-run
的临时命名分支。然后将其推送到CI,以便触发个人构建,如果个人构建成功,则更改将移回原始分支,并删除remote-run
分支。
我对此有几个问题:
我目前定位的方案如下:在默认分支上工作时,用户会添加3个新修订。然后,他希望将这些更改作为TeamCity的个人构建进行运行,但是他忘了将这些修改提交给一个特别命名的分支。相反,我的插件将接受那些传出的更改,并将它们放在指定的分支中。一旦个人构建成功,那么这些更改将被放回原始(默认)分支,并推送到远程存储库。
这样的事情:
[default] A---B---C---D
假设B
,C
和D
是新版本,我希望该工具可以执行此操作:
[default] A
\
[remote-run] B---C---D
完成后,将其恢复到原始状态,即:
[default] A---B---C---D
编辑:我设法将更改移动到使用Mq的另一个分支,这最终变得非常简单。不幸的是,我不知道如何恢复这种变化:)
希望这是有道理的!
答案 0 :(得分:2)
成功构建后,您可以让TeamCity标记您的VCS root。如果没有单独的分支,那么在默认情况下标记每个成功的构建可能没有意义吗?
我不确定你的任务背后的动机,你想从哪个特定的工作流程中受益?
关于第3项,无法保证自动合并回到默认状态。如果存在合并冲突,那么您在构建配置中为“个人构建”添加的任何命令脚本都需要其手动操作才能让您恢复到稳定状态 - 而不是特别“CI”。
对不起,我在第一次通过时无法提供更多帮助。
答案 1 :(得分:1)
这正是'hg rebase'的命令。在你的情况下使用
hg rebase -s B -d A --detach
确保使用最新版本(最新的夜晚版本)。最近修复了一个可能影响这种情况的错误。 此外,必须启用“rebase”扩展才能使其正常工作。确保你在〜/ .hgrc(或mercurial.ini)文件中有以下行:
[extensions]
rebase =
编辑:我似乎回答了一个相反的问题(如何删除本地分支)。要创建一个新的命名分支并将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