2015-12-17 34 views
0

我有一个Ruby on Rails项目,我正在使用SVN(1.6.17,Debian)进行版本控制。我在本地使用git(2.5.4,OS X)和git-svn,我一直在为一个项目的主要更新(使用新的框架版本)开发一个分支(称为“ruby22rails42”),并定期提交更改来自SVN“主干”,以跟上项目的最新进展。最近,我在我们的在线SVN服务器上创建了一个镜像分支(“/branches/v8.5-ruby22rails42”),将我的本地Git分支推到那里,然后再与其他开发人员合并,以供其他开发人员查看。git-svn:重命名分支并将其用作新的SVN'trunk'而不是使用“merge --reintegrate”?

现在我基本上希望“/branches/v8.5-ruby22rails42”成为新的“trunk”,并将旧的SVN中继保留为版本分支(我们称之为“/branches/v8.4-ruby19rails3”) 。不幸的是,“SVN合并--reintegrate”似乎失败,出现“合并信息不支持”错误:

/opt/trunk$ svn merge --reintegrate ^/branches/v8.5-ruby22rails42 
svn: Abfrage der Zusammenführungsinformationen wird von »file:///.../branches/v8.5-ruby22rails42« nicht unterstützt 

说一个svnadmin upgrade修复这个错误?我现在不想更新服务器上的SVN实用程序,因为SVN回购也被很多其他工具访问。

如果不是:

(如何)我能不能SVN服务器和我的git - svn的本地存储库中的重命名树干都用我的分支作为新的“主干”,从而避免在SVN繁琐的合并进程共?我将如何告诉我的本地Git仓库跟踪这个重命名过程? 这可能会要求所有客户放弃本地签出并重新签出新的中继线,但这是可以接受的。

如果这是不可能或不可取的,如何避免使用Subversion 1.6.17的mergeinfo错误,并成功地将我的分支合并到trunk中?然后我可以在合并之前从上次提交中创建一个新分支,并将其保存为我的“v8.4-rails3ruby19”分支。

回答

0

我可能在您的上下文中缺少某些内容,但通常您不想替换原始标记,而是取而代之。我可能会考虑在你的地方是什么样的顺序如下:

  1. 标签当前躯干和/或创建一个速战速决分支/branches/v8.4-ruby19rails3

  2. 合并你的分支到主干。或者通过svn或者git/git-svn

例如,按以下顺序将壁球你所有的作品在您的分支,并把它放到后备箱:

git svn fetch 
git checkout svn/trunk 
git merge --squash ruby22rails42 
git commit -m "Merged ruby22rails42" 
git svn dcommit 
+0

如果我只有git的担心,我只想已合并。然而,上游是(仍然)SVN,并且SVN因为某种原因不想合并(见上面的错误),我不想在SVN或Git仓库中丢失合并历史记录。我通过搜索“git svn merge”所得到的建议都表示要在Subversion中进行合并,否则信息将会丢失...... – Jens

+0

Git-Svn不鼓励合并并倾向于重新分配。如果你不想让你的历史遗失,你可以尝试'git svn rebase',然后'git svn dcommit'。不幸的是,由于从主干合并(而不是回扣),回扣可能不那么顺利。如果这不起作用,你总是可以进入低水平:参见'svn cp'。 –

+0

我继续升级SVN元数据格式以允许mergeinfo,然后使用纯SVN进行合并。之后我还有一些倒退的变化,但并不多。所以使用纯SVN合并来完成这种任务可能是最好的解决方案。 – Jens

相关问题