git-svn
新版本git中已经集成git svn工具,可以用于git和svn之间的转换,在git bash中可以通过 git svn –help 查看相关命令的说明。
git迁移至svn
具体操作
1. 在svn中建立相关目录
2. 在svn服务器中新建svn项目XXXXX(可在服务器上直接创建)。
# svnadmin create XXXXXX
3. svn项目的本地初次提交(可在服务器上直接创建)
# svn mkdir http://IP:PORT/svn/XXXXXX -m "Initial import"
4. 在git环境里初始化svn
$ git svn init svn://ip:port/xxx
5. 获取svn上的更新
$ git svn fetch
会得到svn的分支名
r1 = 1242a1de3082443e16594af0ea276024e49332b4 (refs/remotes/git-svn)
6. 提交Git项目到svn
$ git svn dcommit
==注意:这个时候git会提示==
Unable to determine upstream SVN information from HEAD history.
Perhaps the repository is empty. at /usr/local/git/libexec/git-core/git-svn line XXX.
解决方案:
- 显示svn提交分支的版本号
# git show-ref git-svn// 显示SVN proj trunk分支的HEAD,即r1
"$commit-id " refs/remotes/ git-svn
- 显示Git proj 的第一个commit
# git log --pretty=oneline master | tail -n 1
" $graft-id" initial import
- 关键的地方原方法已经弃用:弃用支持
.git/info/grafts使用下列新命令
- git replace --graft "$commit-id " " $graft-id"
git replace --graft 32b505c37ef2236bb70c24ab5d7aaf267160fb0f 354ee241f287f2d0fac21efe41aa1505b192d8ba
- git filter-branch " $graft-id" ..HEAD
git filter-branch 354ee241f287f2d0fac21efe41aa1505b192d8ba..HEAD
- git svn dcommit