我想使用 cvs2svn 将 CVS 项目转换为 Subversion。它有一个主干(HEAD),以及从主干创建的几个临时开发分支。
在我们转换它之前,我们会将主干中的最新更改合并到所有开发分支中。但它们也会有尚未合并回主干的更改。
当我将项目转换为 SVN 时,它不会有任何合并历史属性。那么如何初始化这些属性,以便随后可以合并到分支和从分支合并?
换句话说,在转换之后,主干和任何给定的分支之间都会有许多差异。下次我从主干合并到分支时,我不想将这些差异视为需要合并的更改。但是当我从分支合并到主干时,我会这样做。这可能吗?
更新:我接受了 mhagger 的建议,并告诉 SVN 分支已经从主干合并了所有更改:
svn co [branch URL] .
svn merge --record-only [trunk URL]
svn commit -m ''
这行得通,所以下次我尝试从主干合并到分支时,它没有显示新的更改。
但是我仍然对从分支回到主干的 --reintegrate 合并有问题。它最终显示了很多“R”替换的文件,这意味着主干有一个文件 X,分支有一个文件 X,但它们不被认为是同一个文件。这使得合并有点混乱,尽管它似乎最终得到了正确的结果。
我认为发生这种情况是因为以下一系列事件:
- 已创建分支(在 CVS 中)
- 将文件 X 添加到主干(在 CVS 中)
- X 被合并到分支中(也在 CVS 中)
- 项目已转换为 Subversion
- Subversion 不知道 branch/X 是从 trunk/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 在进行 --reintegrate 合并时忽略文件的祖先?还是转换这些文件的更好方法?