不同VCS之间的自动集成

时间:2013-04-10 21:29:51

标签: svn merge continuous-integration perforce

我的任务是实现从基于svn的大型开源项目到分叉perforce存储库的持续自动合并(我们的客户需要perforce)。客户功能/更改是在perforce中开发的,我们需要不断地将上游svn存储库中的新更改集成到perforce中。

我清楚地明白,我无法找到一个能完成所有工作的完美工具,因为社区与我们的变化之间的冲突显然会发生,而且应该由人来解决,但我的目标是让这个过程尽可能自动化。积分器只有在出现问题时才应该注意。为了推动自动化任务,我正在使用Hudson,但我认为这并不重要。我只是在寻找一种可以为我做以下事情的工具:

  • 工具应该采用svn changeset
  • 将差异应用于perforce fork
  • 将perforce中的文件相应地删除/重命名/移动到svn(如果有的话)
  • 将更改提交到perforce
  • 如果某个步骤无法完成则返回错误

哪种工具可以帮助我在不同的VCS之间进行这种自动合并?

1 个答案:

答案 0 :(得分:0)

一般方法

此方法适用于几乎所有情况,包括将库作为直接tarball而没有源控制信息。

在做这样的事情时,我总是发现将干净的原始资源保存在perforce(// depot / thirdparty / library或类似的东西)的一个地方是有帮助的。这应该始终是您正在使用的外部库版本中未更改的代码。在Perforce之后,将其从您的版本集成到您的版本,并仅对您需要的更改(如果有)进行此新版本。

当原始库发生更改并且您想要更新时,请进入第三方源,使用新源强制覆盖所有内容,然后告诉perforce磁盘上的内容是正确的版本(我忘记了命令,但问题已经在StackOverflow上回答了这个问题,然后提交。请注意,如果您想要实际跟踪文件重命名,这将无效,但对于一般代码开发,它可以很好地工作。

此时,您有一个更新的库,然后您可以再次将其集成到您的工作树中。这将使用Perforce跟踪您应用的差异(如果有),以对照源库中的更改。 Perforce通常非常适合检测冲突的变化,因此这应该减少需要手工检查的地方数量。

一旦到位,您可以自动执行许多步骤,当Perforce未检测到任何冲突时,可以自动完成整个更新。

对于偶尔更新的图书馆来说,这确实有效,但没有理由不能使用经常更新的资源。

工具集成

Perforce的最新版本包括git兼容模式,git本身可以从svn存储库中提取,因此您应该能够使用git作为中介来处理更新,并在更改中提供更多详细信息。在这里,应该有一些被认为是规范源的地方,一个包含对库所做更改的地方,以及Perforce使用的结果代码。如果您的客户需要Perforce,我建议使用Perforce来跟踪原始库的更改,但理论上也可以使用git桥。