最近需要将项目从svn迁移到git,至于原因请忽略,至于svn与git区别优劣请自行百度。一共有两种方式可行:
第一种方式较为常见,但是会丢失之前svn版本提交记录,就是将svn checkout到本地然后上传到git上
详情参见:http://blog.csdn.net/hanhailong726188/article/details/46738929
第二种方式较为复杂,但是可以保留之前svn版本提交记录,执行命令如下:
git svn clone https://172.16.0.241:8443/svn/wsgjp/ -r 76896:HEAD --no-metadata --authors-file=user.text -s cp -Rf .git/refs/remotes/origin/* .git/refs/heads/ rm -Rf .git/refs/remotes git remote add origin ssh://[email protected]/welkin/batchserver.git git push origin --all
知识点:
如果svn上的commit次数非常多, git svn clone 就会非常慢,一般超过几百个版本就要大概十分钟。此时可以在clone的时候只下载部分版本,
命令:git svn clone -r<开始版本号>:<结束版本号> <svn项目地址> [其他参数]
说明:其中76896为svn版本号,HEAD代表最新版本号,就是只下载svn服务器上版本76896到最新的版本的代码.
authors-file:必须指定svn帐号在git中的映射
users.txt:存储svn账号与gitlab上账号的关联性,如下:
VisualSVN Server = wssf2014<zqhym***@gmail.com> yqdong = yqdong<×××@163.com>...... 格式: svn用户名 = git用户名<git用户对应的邮箱帐号>
注意: svn里面有的账号必须要做关联,否则clone会失败.比如上面的user11找不到是哪个开发人员,也不知道它该对应哪个git账号,那就随便指定一个git账号就行了,这样做的目的其实就是将user11在svn里面的所有提交日志关联到yqdong的git账号下。 转到git之后,原svn账号就无关紧要,各司其职了。
-s 告诉 Git 该 Subversion 仓库遵循了基本的分支和标签命名法则,也就是标准布局。
如果你的主干(trunk,相当于非分布式版本控制里的master分支,代表开发的主线),分支(branches)或者标签(tags)以不同的方式命名,则应做出相应改变。
-s参数其实是-T trunk -b branches -t tags的缩写,这些参数告诉git这些文件夹与git分支、tag、master的对应关系。
如果不是上述这种命名法则,那你需要使用 --tags
, --branches
, --trunk
参数(请通过 git svn help
自行了解)
- trunk指定导出仓库的主干项目路径。
- branches指定svn的分支项目路径。
svn文件标识图