使用 Git 与 Subversion 仓库协同工作的全攻略
1. 提交前的问题与处理
在使用git svn dcommit命令时,若你有中央 SVN 源代码仓库的提交权限,在命令提示输入密码时输入后,git svn会执行相应操作。不过,当你尝试提交到并非最新的版本时,情况会变得复杂。
由于 SVN 采用线性、顺序的历史视图,若本地副本版本较旧且已在该旧版本上进行提交,就无法将其直接提交回服务器,因为 SVN 无法在项目历史的早期点创建新分支。但使用 Git 进行提交时会产生历史分叉,此时有两种处理方式:
1. 若历史分叉是有意为之,可保留两部分历史,将它们合并后提交到 SVN。
2. 若分叉并非有意,可将历史线性化后再提交。
这与git merge和git rebase的选择类似,前者对应git merge,后者类似git rebase。虽然 Git 提供了这两种选择,但无论选哪种,SVN 都会丢失部分历史信息。
在继续操作前,需从 SVN 获取最新版本:
$ git svn fetch M STATUS M build.conf M COMMITTERS r33143 = 152840fb7ec59d642362b2de5d8f98ba87d58a87 (git-svn) M ST