2015-10-17 79 views
-1

对不起,我想不出一个好的方法来解释它在一个句子中的标题。SVN恢复更改。重新申请后续更改

所以我想知道的是为多个开发人员构建SVN的最佳方法。我们有一个Dev(Trunk),UAT,Release。一旦发布完成,它将被标记为记录。

每个人都可以在Dev或分支中工作,如果功能足够大以保证它。一旦他们测试了并且对他们的变化感到满意,他们就会将他们的变化从开发者合并到UAT或者(分支到开发者到UAT)。

问题出现在UAT中失败时。我们需要能够消除这种变化。我们尝试在系统的完全独立部分上工作,但这并非总是可行。所以有时候我们可能有:

变化1个
变化2
更改3
更改4

变化1和3改变都影响到一些萨姆斯文件。更改1未通过测试。然后,我们可以恢复变更1中受影响的文件,但是这也将恢复变更4中的变更。是否有办法将所有变回原来的变更为1,然后重新申请以便进行后续更改。我知道我们可以手动重新组合所有更改,但可能会同时进行30个更改,因为它是一个非常大的系统。

我知道这可能会导致更改4不再起作用,因为它可能无意中依赖于更改1内的更改。但是在大多数情况下,id希望它能够正常工作。

首先这是可能的自动化方式吗?

第二是它实际上是一个有效的工作程序?

如果不是有更好的方法来管理多个开发人员同时在系统上工作,并允许拉动变更集?

感谢

+0

如果你在svn工作,git怎么样? –

+0

我为Git添加标签的原因是它可能是解决此问题的更合适的解决方案。 – stf

回答

0

唯一的100%可靠的解决这个问题是避免合并功能(不直接在彼此相关的),直到他们一起过去了UAT,甚至更好 - 部署生产。这个方向通常被称为Continuous Delivery。对于UAT需要较短的交付时间,并且部署周围需要强大的工程规范。

如果您还没有准备好转移到CD,那么您将最终面临需要按照描述恢复一些更改。一些类似git的VCS可以简化这个过程,但不会通过某种魔法解决主要问题。

至于你的例子中的技术,你总是可以回复有问题的Change 1(在svn或git revert <sha1>合并反向更改)。您将被svn和git通知明显的文本冲突,您可以通过手动修复这些冲突,也可以从恢复后来的相关更改开始。 git revert <Change 3>; git revert <Change 1>在你的情况下,随后再重新做Change 3。 SCM将无法通过Change 4检测到更高阶的潜在冲突。

+0

我知道并得到一些案例,当C1或C2工作,但是C1和C2不工作时 –