服务器端SVN分支重新整合

服务器端SVN分支重新整合,svn,merge,branch,Svn,Merge,Branch,我正在开发一个平台,以在我们的环境中自动化和集成功能分支步骤 现在我知道重新整合分支的正确程序是: svn在branchworking copy中合并URL/trunk以与trunk同步 主干工作副本中的svn更新 svn合并-在主干工作副本中重新整合URL/分支 第一点是最容易出错的,因为可能有一些冲突需要解决,所以它只是客户端 但我会通过我的平台GUI在服务器上运行reintegrate merge,显然是在检查确保分支与主干同步之后。这可能吗?好的,让我检查一下场景-我猜您试图将开发人员与

我正在开发一个平台,以在我们的环境中自动化和集成功能分支步骤

现在我知道重新整合分支的正确程序是:

svn在branchworking copy中合并URL/trunk以与trunk同步 主干工作副本中的svn更新 svn合并-在主干工作副本中重新整合URL/分支 第一点是最容易出错的,因为可能有一些冲突需要解决,所以它只是客户端


但我会通过我的平台GUI在服务器上运行reintegrate merge,显然是在检查确保分支与主干同步之后。这可能吗?

好的,让我检查一下场景-我猜您试图将开发人员与主干完全隔离,这样就没有人直接提交到主干。我假设您的平台会自动创建这些分支,开发人员可以在某个时候说他们已经完成了分支,并将其重新合并。因此,代码遵循以下循环:

树枝 编辑 向分支机构承诺 从主干重新建立分支 更新中继wc 重新集成分支到主干wc 提交中继wc 事实上我完全赞成,如果这是你想要的工作方式,太好了

我想不出它会彻底失败的原因,但您必须检查以下事项:

在没有让开发人员先查看的情况下,任何代码都不能签入。 错误总是发生在主干上,开发人员可能需要一种方法在某个时候直接在主干上进行黑客攻击。 即使没有合并,如果开发人员没有重新基于最新的主干,重新整合可能会引入微妙的错误。 第一点是最重要的。这意味着,当重新集成发生时,它必须是有效的禁止操作。如果在您的2.2步骤中发生任何类型的合并,我会说您必须扔掉提交,让开发人员再次从主干重新建立基础。即使svn说合并是成功的,没有冲突,你也不能相信它做了足够正确的事情,可以开火并忘记。如果要实现自动化,请确保开发人员承诺的是合并的内容,而不是自动生成的混合。 您可以通过查看合并的输出来检查合并是否“干净”——如果有任何文件被“合并”,那么就有问题了。如果它们刚刚更新过,那么你就没事了

第3点很有趣,但始终是个问题,即使在正常工作中也是如此。在这种情况下,开发人员A会说他们已经完成了,重新创建了他们的工作副本,然后花一段时间检查一切是否正常。同时,开发人员B偷偷地对主干进行更新。开发人员A决定一切正常并重新集成。然而,开发人员B所做的更改意味着,即使代码没有触及开发人员A修改的任何文件,代码也会出错。因为开发人员A是最后一个提交的,所以他们会受到指责

假设是,如果deva包含了devb的更改,那么他就会发现问题。您的平台有机会发现这种情况,例如,如果svn merginfo说有主干修订可以提交给分支机构,那么它不是最新的。然而,我也要警告不要在不必要的地方创建一个永恒的合并周期。也许可以给开发人员一个警告,说明自从他们重新创建以来已经进行了提交,但无论如何都允许他们继续进行

最后一点注意:我在上面提到了使用svn mergeinfo。您不能依赖于此来假设重新集成合并是可以的。如果你这样做了,那么在进行检查和提交合并之间会有一个竞争条件——有人可能在这段时间内进入。您仍然需要检查实际merge命令的输出,以查看实际发生的情况

如果多个开发人员同时尝试重新集成,也要注意这种情况。如果每次签出一个新的工作副本,您可以拥有任意数量的副本,但是提交很可能会失败,并出现旧文件过期类型错误。在这些情况下,重新集成将再次失败,您将不得不让开发人员重新构建他们的分支


总之,我喜欢它。这里面有相当多的复杂性,但归根结底,这就是这种系统的意义所在——它处理复杂的东西,所以开发人员不必这样做。他们所要做的就是不断地重新建立分支的基础,直到系统允许他们成功地重新集成。

好的,让我检查一下场景——我猜你是在试图将开发人员与主干完全隔离,这样就没有人直接提交到主干。我假设您的平台会自动创建这些分支,开发人员可以在某个时候说他们已经完成了分支,并将其重新合并。因此,代码遵循以下循环:

树枝 编辑 向分支机构承诺 从主干重新建立分支 更新中继wc 重新集成分支到主干wc 提交中继wc 事实上我完全赞成,如果这是你想要的工作方式,太好了

我想不出它会失败的原因 完全正确,但您必须检查以下事项:

在没有让开发人员先查看的情况下,任何代码都不能签入。 错误总是发生在主干上,开发人员可能需要一种方法在某个时候直接在主干上进行黑客攻击。 即使没有合并,如果开发人员没有重新基于最新的主干,重新整合可能会引入微妙的错误。 第一点是最重要的。这意味着,当重新集成发生时,它必须是有效的禁止操作。如果在您的2.2步骤中发生任何类型的合并,我会说您必须扔掉提交,让开发人员再次从主干重新建立基础。即使svn说合并是成功的,没有冲突,你也不能相信它做了足够正确的事情,可以开火并忘记。如果要实现自动化,请确保开发人员承诺的是合并的内容,而不是自动生成的混合。 您可以通过查看合并的输出来检查合并是否“干净”——如果有任何文件被“合并”,那么就有问题了。如果它们刚刚更新过,那么你就没事了

第3点很有趣,但始终是个问题,即使在正常工作中也是如此。在这种情况下,开发人员A会说他们已经完成了,重新创建了他们的工作副本,然后花一段时间检查一切是否正常。同时,开发人员B偷偷地对主干进行更新。开发人员A决定一切正常并重新集成。然而,开发人员B所做的更改意味着,即使代码没有触及开发人员A修改的任何文件,代码也会出错。因为开发人员A是最后一个提交的,所以他们会受到指责

假设是,如果deva包含了devb的更改,那么他就会发现问题。您的平台有机会发现这种情况,例如,如果svn merginfo说有主干修订可以提交给分支机构,那么它不是最新的。然而,我也要警告不要在不必要的地方创建一个永恒的合并周期。也许可以给开发人员一个警告,说明自从他们重新创建以来已经进行了提交,但无论如何都允许他们继续进行

最后一点注意:我在上面提到了使用svn mergeinfo。您不能依赖于此来假设重新集成合并是可以的。如果你这样做了,那么在进行检查和提交合并之间会有一个竞争条件——有人可能在这段时间内进入。您仍然需要检查实际merge命令的输出,以查看实际发生的情况

如果多个开发人员同时尝试重新集成,也要注意这种情况。如果每次签出一个新的工作副本,您可以拥有任意数量的副本,但是提交很可能会失败,并出现旧文件过期类型错误。在这些情况下,重新集成将再次失败,您将不得不让开发人员重新构建他们的分支


总之,我喜欢它。这里面有相当多的复杂性,但归根结底,这就是这种系统的意义所在——它处理复杂的东西,所以开发人员不必这样做。他们所要做的就是不断地重新建立分支,直到系统允许他们成功地重新集成。

问题是,是否可以进行svn合并-重新集成服务器端?因为svn merge寻找一个工作副本。是的,这很好,前提是开发人员已经提交了所有内容。在服务器上,您需要在wc中签出主干,然后使用分支的存储url重新集成。问题是,是否可以执行svn合并-重新集成服务器端?因为svn merge寻找一个工作副本。是的,这很好,前提是开发人员已经提交了所有内容。在服务器上,您需要在wc中签出主干,然后使用分支的存储url重新集成。