2011-01-06 61 views
5

在每次提交到'trunk'之后,我们会自动运行一系列针对trunk的测试。当这些测试通过时,我想自动合并到一个名为'tests-passed'的分支中。当测试失败时,不应该发生合并,但是一旦问题在下一次或稍后的提交中被固定在“trunk”上时,所有更改都应该合并。如何在自动化测试通过时自动合并svn?

关键是要有一个与trunk相同内容的分支,但这比“trunk”更加理智,因为至少自动化测试已经过去了。

我有一个脚本,试图手动做到这一点,但它是一个使用自定义属性,并不总是正常工作 - 如我刚刚发现的。我如何最好地使Subversion做到这一点?

+0

您打算如何处理合并冲突? – Steve 2011-01-06 19:36:22

+1

我不认为应该有任何合并冲突:'测试通过'始终与'trunk'具有相同的内容,除非'trunk'上的HEAD未通过测试,在这种情况下,它具有与最后一次测试通过的'trunk'。 – 2011-01-06 20:03:14

回答

5

运行这些命令在测试,通过了,只要你已经确定了新的树干修订版<somerev>已通过测试的工作副本根:

svn update 
svn merge http://example.com/svn/myproject/trunk -r 0:<somerev> 
svn commit -m "merged trunk revisions up to <somerev> into tests-passed" 

每当你使用合并命令,SVN会记录合并在svn:mergeinfo财产。因此,上述命令应自动确定0:<somerev>范围内的哪些修订版本可以合并,排除已完成的任何合并。

就像你在评论中说的那样,冲突不是预期的。但是,有时候我会看到在合并包含重命名的一系列SVN修订版时出现意外冲突。要摆脱这些冲突,您可以使用merge命令的--accept theirs-full选项始终接受中继状态。

0

我会想象使用测试套件来做到这一点。

根据我的经验,我会运行一个ANT脚本来测试我的代码,并且如果测试成功,最后有条件执行分支。

+0

我们确实用蚂蚁进行测试,并且我们有最终的条件,就像你说的那样。问题是:如何让svn根据该条件进行正确的合并? – 2011-01-06 19:55:33

+0

你们是否在每一个新代码中都使用Name_spacing。 (code_ versioning)可能有助于这种情况。 – NaV 2011-01-06 20:12:35

1

您可以为此使用连续集成工具。一个很受欢迎:哈德森

http://hudson-ci.org/

您可以编写脚本这种行为的存在。