本文介绍用git-svn将git仓库转成一个svn仓库。要求git本地仓库是线性提交的。
假设我们要将/home/user目录下的git仓库repos.git转成/home/user目录下的svn仓库svn-repos.
1. 首先创建一个空svn仓库
cd /home/user
svnadmin create svn-repos
2. 然后用git-svn将这个空svn仓库转成一个临时的git仓库temp-repos.git
git clone file:///home/user/svn-repos temp-repos.git
3. 将本地git仓库repos.git拉到临时git仓库temp-repos.git
cd temp-repos.git
git remote add repos /home/user/repos.git
git pull repos
4. 新建两个git分支, 分别指向repos.git的第一个和最后一个提交(等于远程分支repos/master)
git branch start SHA1-of-the-first-revision-of-remote-repository-repos
git branch newmaster repos/master
5. 开始我们的拷贝
git checkout newmaster
git cherry-pick start
git rebase --onto master start newmaster
此时用git branch查看分支, 应该位于newmaster分支上
6. 提交
git svn dcommit
此时在svn-repos中就是git仓库repos.git中的所有内容了. 此时可以checkout此svn仓库了
7. 测试
cd /home/user/
rm temp-repos.git -rf
svn co file:///home/user/svn-repos work-copy
cd work-copy
svn log