26.5 git-svn的局限
Subversion和Git的分支实现有着巨大的不同。Subversion的分支和里程碑,是用轻量级拷贝实现的,虽然创建分支和里程碑的速度也很快,但是很难维护。即使Subversion在1.5之后引入了svn:mergeinfo属性对合并过程进行标记,但是也不可能让Subversion的分支逻辑更清晰。git-svn无须利用svn:mergeinfo属性也可实现对Subversion合并的追踪,在合并的时候也不会对svn:mergeinfo属性进行更改,因此在使用git-svn操作时,如果在不同分支间进行合并,会导致Subversion的svn:mergeinfo属性没有相应的更新,从而导致Subversion用户进行合并时因为重复合并而冲突。
简而言之,在使用git-svn时尽量不要在不同的分支之间进行合并,而是尽量在一个分支下进行线性的提交。这种线性的提交会很好地推送到Subversion服务器中。
如果真的需要在不同的Subversion分支之间合并,尽量使用Subversion的客户端(svn 1.5版本或以上)执行,因为这样可以正确地记录svn:mergeinfo属性。当Subversion完成分支合并后,在git-svn的克隆库中执行git svn rebase命令获取最新的Subversion提交并变基到相应的跟踪分支中。