我希望使用cvs2svn将CVS项目转换为Subversion。它有一个主主干(HEAD),由主干创建了几个临时开发分支。
在转换它之前,我们将把主干中的最新更改合并到所有dev分支中。但是,它们也会有一些尚未合并回主干的更改。
当我将项目转换为SVN时,它将没有任何合并历史属性。那么,我如何初始化这些属性,以便随后与分支合并?
换句话说,在转换之后,主干和任何给定的分支之间都会有一些不同。下一次,当我从主干合并到分支时,我不希望看到这些差异是需要合并的更改。但当我从树枝上合并到树干里时,我会的。这个是可能的吗?
UPDATE:我采纳了mhagger的建议,并告诉SVN分支已经从主干合并了所有更改:
svn co [branch URL] .
svn merge --record-only [trunk URL]
svn commit -m ''这是可行的,所以下次我尝试从主干合并到分支时,它将不会显示新的更改。
但我还是有问题--重新整合,从树枝回到树干。它最后显示了大量"R"eplaced文件,这意味着主干有一个文件X,而分支有一个文件X,但是它们不被认为是同一个文件。这使得合并变得有点混乱,尽管最终的结果似乎是正确的。
我认为发生这种情况是因为以下一系列事件:
SVN历史看起来如下所示:
r100: create branch (copied from trunk)
r200: add trunk/X
r300: add branch/X (because of a CVS merge, but it's not a SVN copy)那么,在进行重新整合合并时,我有没有办法告诉Subversion忽略文件的祖先呢?还是更好的转换这些文件的方法?
发布于 2009-07-10 04:46:06
好吧,我想我有办法解决上面提到的重新整合问题,以防有人感兴趣。
根据本文件的说法,如果我已经将主干的最新版本合并到分支中,那么执行--重新整合与对主干执行此操作本质上是一样的:
svn merge [trunk URL] [branch URL]但是这个语法允许--忽略祖先,这--不能重新整合。所以我可以:
svn merge --ignore-ancestry [trunk URL] [branch URL]这向我展示了和重新整合一样的结果,没有所有的“R”文件。唯一的其他区别似乎是mergeinfo属性。我不确定这些是否正确,所以最好在之后删除这个分支,就像你在重新整合之后那样。
发布于 2009-03-11 04:29:03
您可能知道,cvs2svn不生成任何合并元数据,除了关于分支从何处发芽的隐式信息。(它不能,因为CVS没有记录这样的信息。)因此,在转换之后,您必须显式地告诉Subversion在CVS下完成的合并。
最简单的方法是使用"svn merge --record-only ...",如颠覆书中所描述的。
https://stackoverflow.com/questions/632729
复制相似问题