1

我要解决的问题与Subversion 与生产代码不同步没有什么不同,这是更新 subversion 的最简单方法,但有些不同。

我将一个(Java)项目从 CVS 转换为 SVN(使用 cvs2svn,保留完整的历史记录) - 比如版本 1.00

版本 2.00 的开发继续使用 SVN 中的代码。

同时,在 CVS 中进行了一些修复(因为开发工具设置不同。)

现在,我需要做的是有效地从 CVS 重新导入项目的一部分。

如果我有

cvs:project/module1 (version 1.00)
           /module2 (version 1.10)

svn:project/trunk/module1 (version 2.xx)
                 /module2 (Version 1.00)

有没有办法从 CVS 重新导入 module2 并保留完整的历史记录?

我在 CVS 存储库上再次运行 cvs2svn,并将其作为另一个项目加载到 SVN,然后进行毫无根据的合并 - 但我不确定这是否是个好主意。

我将在 SVN 中维护 1.xx 版本。

4

3 回答 3

0

您可以将当前的 CVS 存储库转换为新的虚拟 SVN 存储库。使用它,您可以挑选修订版以转储并将这些转储重播回真正的 SVN 存储库。(我不知道这将如何处理在真实 SVN 和 CVS/虚拟 SVN 中更改相同文件的情况。您可能希望通过将精选的转储重播到特定的转储来避免发现这一点分支。)

不过,可能有更好的方法,这可能根本行不通。我只将一个 CVS 存储库转换为 SVN 存储库,这是一项一次性完成的任务。因此,将其与大量盐一起使用,然后先在副本上进行干燥。

于 2010-10-21T08:42:41.700 回答
0

从您引用的版本号来看,似乎 module1 上的所有转换后提交都在 Subversion 中,而 module2 上的所有转换后提交都在 CVS 中。如果是这种情况,您可以尝试以下方法:

再次转换整个 CVS 项目,使用与以前相同的 cvs2svn 选项。如果幸运的话,生成的 Subversion 存储库的 r0:rN(其中 N 是某个数字)将与第一次转换产生的 Subversion 存储库的重叠部分一致。在这种情况下,您应该能够从新的 Subversion 存储库中“svnadmin dump --incremental -rN:HEAD”并在旧的 Subversion 存储库上“svnadmin load”它。组合存储库中的提交不会按时间顺序排列,但这是一个小麻烦(可能会使用其他一些工具来修复,但会以重新编号 Subversion 提交为代价)。

(Subversion 存储库的重叠部分不一定相同;cvs2svn 使用一些启发式方法来推断变更集,并且它们的推断可能因其他更改而不同。但只要每个存储库中有可识别的“1.00”修订版具有相同的内容,那么我认为该程序应该可以工作。)

在你尝试这个之前做好备份!

于 2010-11-04T16:41:20.123 回答
0

由于我还将在 SVN 中维护 1.xx 版本,并且我知道代码在什么时候出现分歧,所以我应该只能合并在迁移到 SVN 后创建的更改列表。这看起来会让事情保持最整洁。

我现在正在试验。

于 2010-10-21T16:35:52.843 回答