在Subversion的混合修订工作副本中查找错误

时间:2009-11-20 05:17:09

标签: c++ svn version-control

我工作的项目最近已经从一个可怕的陈旧的版本控制系统切换到Subversion。几年前我觉得我对Subversion有相当好的理解,但是一旦我了解了Mercurial,我就很快忘记了Subversion。

我的问题针对那些在Subversion的同一分支上与大量(15+)开发人员合作的人。

假设您结帐了存储库的rev N.您进行了一些更改然后提交。同时,其他开发人员已对其他文件进行了更改。您听说其他开发人员对子系统X的更改并决定您需要立即更新。您不希望更新整个工作副本,因为它会引入各种各样的东西,然后您将不得不进行冗长的编译(C ++项目)。我看到的风险是开发人员只更新子系统X而没有意识到新代码依赖于子系统Y的最近更改。代码编译,但在运行时崩溃。

你是如何处理的?

  • 开发人员是否报告他们认为可能是错误的内容(即使这不是错误)?
  • 您是否要求开发人员在报告错误之前更新其整个工作副本?这会阻止错误报告吗?
  • 你是否通过我没想过的某种机制来防止这种情况发生?

2 个答案:

答案 0 :(得分:1)

由于您已完成所有正在进行的工作,因此您没有理由不使用整个最新版本更新副本。冗长的编译是大型项目价格的一部分。编译时间几乎总是小于尝试确定是否有错误所花费的时间,或者是否存在一些模糊的不兼容性,因为您没有检查所有内容。

该项目已将编译分发到组中的所有工作站。由于我们有大约15台计算机用于完成任务,这意味着通常需要6小时左右的时间才能完成约25分钟。

答案 1 :(得分:0)

跟踪依赖关系的责任是介绍它的develloper。 在这种情况下,develloper X应确保更改与其他子系统的当前版本一起使用。或者至少记录它适用的版本。

我看到帮助发展者解决这个问题的方法是。

  1. 在构建系统中包含依赖项检查。许多开源项目都是在.configure脚本中完成的。
  2. 配置版本控制系统以便为您处理此问题。我不知道在颠覆中这样做。
  3. 这显然不能解决长编译时间,但它有助于避免不必要的重建。 复杂的依赖图也表明设计有问题。重构代码以减少子系统之间的耦合可能是个好主意。