对不起,我想不出用一句话来解释它的好方法。
所以我想知道的是构建SVN以供多个开发人员使用的最佳方法。我们有一个Dev(Trunk),UAT,Release。一旦发布完成,它就会被标记为记录。
如果功能足够大,可以在Dev或分支中工作。一旦他们测试并对他们的更改感到满意,他们就会将他们的更改从Dev合并到UAT或(从分支到开发到UAT)。
当UAT出现故障时,问题就出现了。我们需要能够删除此更改。我们尝试在系统的完全独立的部分上工作,但这并不总是可行的。所以有时我们可能会:
更改1
改变2
改变3
改变4
更改1和更改3都会影响某些相同的文件。变更1未通过测试。然后,我们可以还原更改1中受影响的文件,但这也将还原更改中的更改4.是否有办法将所有内容还原为更改1,然后按顺序重新应用每个后续更改。我知道我们可以手动重新包含所有更改,但由于它是一个非常大的系统,因此可能会同时发生30次更改。
我知道这可能导致变更4不再起作用,因为它可能无意中依赖于变更1中的变化。但在大多数情况下,id期望它起作用。
这首先是自动化的吗?
第二,它实际上是一个有效的工作程序吗?
如果没有更好的方法来管理多个开发人员同时在系统上工作并允许更改集?
由于
答案 0 :(得分:0)
这个问题唯一100%可靠的解决方案是避免将功能(彼此之间没有直接关联)合并在一起,直到它们通过UAT,甚至更好地部署生产。这个方向一般称为Continuous Delivery。需要缩短UAT的准备时间以及围绕部署的强大工程学科。
如果您尚未准备好转移到CD,那么您最终将需要按照您的描述恢复某些更改。像git这样的一些VCS可以简化这个过程,但不会通过任何一个魔法来解决主要问题。
对于您示例中的技术,您始终可以还原有问题的fc-list
(在svn或Change 1
中合并反向更改)。您将通过svn和git通知您明显的文本冲突,您可以手动修复,也可以从恢复后来的依赖更改开始,例如:在您的情况下git revert <sha1>
,随后重新执行git revert <Change 3>; git revert <Change 1>
。 SCM无法通过Change 3
检测到更高阶的潜在冲突。