1

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

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

  • 工具应该采用 svn 变更集
  • 将差异应用于 perforce fork
  • 根据 svn(如果有)在 perforce 中删除/重命名/移动文件
  • 提交更改以执行
  • 如果某些步骤无法完成,则返回错误

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

4

1 回答 1

0

一般方法

这种方法几乎适用于任何情况,包括将库作为没有源代码控制信息的直接 tarball 获取。

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

当原库发生变化,你要更新时,进入第三方源,用新源强行覆盖所有内容,然后告诉 perforce 磁盘上的内容是正确的版本(我忘记了命令,但问题已经回答了在 StackOverflow 上),然后提交。请注意,如果您想实际跟踪文件重命名,这将不起作用,但对于一般代码开发来说它做得很好。

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

一旦这到位,您可以自动执行一些步骤,并且当 Perforce 没有检测到任何冲突时,整个更新可能会自动完成。

对于偶尔更新的库,这确实会更好地工作,但是没有理由不能使用频繁更新的源。

工具集成

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

于 2013-04-11T15:45:53.900 回答