2

我正在考虑在 TeamCity Visual Stuio 插件中添加“为 Mercurial 远程运行(个人构建)”功能的想法。

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

这个想法是从当前分支(比如说default)获取当前传出的变更集,并将它们移动到一个名为remote-run. 然后将其推送到 CI,因此触发个人构建,如果个人构建成功,则将更改移回原始分支,并remote-run删除该分支。

我对此有几个问题:

  1. 它甚至有意义吗?
  2. 我应该为此使用哪个扩展?我相信 MqExtension 可以满足我的所有需求,但有其他选择吗?
  3. 如果用户在远程运行期间提交了额外的更改会发生什么?“临时分支”变更集如何合并回原始分支?

我目前的目标场景如下:在默认分支上工作时,用户添加了 3 个新版本。然后,他想在 TeamCity 上将这些更改作为个人构建运行,但他忘记将这些修订提交到一个特别命名的分支。相反,我的插件将接受那些传出的更改,并将它们放在命名的分支中。一旦个人构建成功,这些更改就会被放回原始(默认)分支,并推送到远程存储库。

像这样的东西:

[default] A---B---C---D

假设B和是新修订版CD我希望该工具执行以下操作:

[default] A
           \
            [remote-run] B---C---D

完成后,将其恢复到原始状态,即:

[default] A---B---C---D

编辑:我设法使用 Mq 将更改移动到另一个分支,这最终变得非常容易。不幸的是,我不知道如何恢复此更改:)

希望这是有道理的!

4

2 回答 2

2

成功构建后,您可以让 TeamCity 标记您的 VCS 根目录。在没有单独的分支的情况下仅标记每个成功的默认构建可能不是更有意义吗?

我不确定你任务背后的动机,你想从什么具体的工作流程中受益?

关于第 3 项,无法保证自动合并回默认值。如果存在合并冲突,无论您为“个人构建”放入构建配置中的任何命令脚本都需要它的手来让您回到稳定状态 - 而不是特别是“CI”。

对不起,我不能在第一次通过时提供更多帮助。

于 2011-11-17T01:40:24.533 回答
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
于 2011-11-22T09:35:27.447 回答