Svn 不同VCS之间的自动集成

Svn 不同VCS之间的自动集成,svn,merge,continuous-integration,perforce,Svn,Merge,Continuous Integration,Perforce,我的任务是实现从一个大型的、开源的、基于svn的项目到我们的客户需要的forked perforce存储库的连续自动合并。客户功能/变更在perforce中开发,我们需要不断将上游svn存储库中的新变更集成到perforce 我清楚地理解,我不能得到一个完美的工具来为我做所有的工作,因为社区和我们的变化之间的冲突显然会发生,它们应该由人来解决,但我的目标是使这个过程尽可能自动化。集成商应该只在肯定出了问题的时候才注意。为了推动自动化任务,我使用了哈德逊,但我认为这并不重要。我只是在寻找一个可以为

我的任务是实现从一个大型的、开源的、基于svn的项目到我们的客户需要的forked perforce存储库的连续自动合并。客户功能/变更在perforce中开发,我们需要不断将上游svn存储库中的新变更集成到perforce

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

工具应采用svn变更集 将差速器应用于perforce拨叉 根据svn删除/重命名/移动perforce中的文件(如果有) 将更改提交到perforce 如果某个步骤无法完成,则返回错误 哪种工具可以帮助我在不同的风投之间进行自动合并?

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

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

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

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

一旦这一切就绪,您就可以自动执行许多步骤,并且当Perforce未检测到任何冲突时,整个更新可能会自动完成

对于偶尔更新的库来说,这确实更有效,但没有理由不能与频繁更新的源一起工作

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

您的意思似乎是协调功能。和我们现在使用的方法一样,但开源项目是巨大的——它有大约10k个文件。文件/文件夹重命名/移动在那里并不少见。使用协调方法,当上游文件被移动/重命名时,我们可能会丢失本地更改:在这种情况下,文件将被视为在一个位置被删除,而新文件出现在另一个位置。这显然会导致丢失已删除文件中的更改。我们绝对需要避免这种情况。Perforce merging system相当智能,但问题在于跟踪外国风投的此类变化。关于git,我需要检查一下,因为我们仍然使用p4客户端版本2012和2010作为服务器,这是我们的客户环境,所以git对这些旧的p4版本也可能有一些限制,但是谢谢你的建议——我肯定会尝试这种方法。@stunpix:concure这个词我确实记不起来了。我可能弄错了,因为我最近没有尝试过,但是如果您在不同的分支中进行更改,而不是在Performance中进行协调,那么它至少应该在删除文件时警告您您已更改。我敢肯定,它并不像您希望的那样自动化,但至少会通知您,而不是悄悄地丢失它。