最近须要将项目从svn迁移到git,至于缘由请忽略,至于svn与git区别优劣请自行百度。一共有两种方式可行:git
第一种方式较为常见,可是会丢失以前svn版本提交记录,就是将svn checkout到本地而后上传到git上vim
详情参见:http://blog.csdn.net/hanhailong726188/article/details/46738929服务器
第二种方式较为复杂,可是能够保留以前svn版本提交记录,执行命令以下:ssh
git svn clone https://172.16.0.241:8443/svn/wsgjp/ -r 76896:HEAD --no-metadata --authors-file=user.txt -s cp -Rf .git/refs/remotes/origin/* .git/refs/heads/ rm -Rf .git/refs/remotes git remote add origin ssh://git@git.china.netease.com/welkin/batchserver.git git push origin --all
知识点:分布式
若是svn上的commit次数很是多, git svn clone 就会很是慢,通常超过几百个版本就要大概十分钟。此时能够在clone的时候只下载部分版本,
命令:git svn clone -r<开始版本号>:<结束版本号> <svn项目地址> [其余参数]
说明:其中76896为svn版本号,HEAD表明最新版本号,就是只下载svn服务器上版本76896到最新的版本的代码.svn
no-metadata:阻止git导出SVN包含的一些无用信息gitlab
authors-file:必须指定svn账号在git中的映射布局
user.txt:存储svn帐号与gitlab上帐号的关联性,以下:spa
生成命令:svn log --xml | grep author | sort -u | perl -pe 's/.*>(.*?)<.*/$1 = /' > user.txt
剩下的须要本身去vim user.txt手动去更改
VisualSVN Server = wssf2014<zqhym***@gmail.com> yqdong = yqdong<×××@163.com>
......
格式: svn用户名 = git用户名<git用户对应的邮箱账号>
-s 告诉 Git 该 Subversion 仓库遵循了基本的分支和标签命名法则,也就是标准布局。
若是你的主干(trunk,至关于非分布式版本控制里的master分支,表明开发的主线),分支(branches)或者标签(tags)以不一样的方式命名,则应作出相应改变。
-s参数实际上是-T trunk -b branches -t tags的缩写,这些参数告诉git这些文件夹与git分支、tag、master的对应关系。.net
若是不是上述这种命名法则,那你须要使用 --tags
, --branches
, --trunk
参数(请经过 git svn help
自行了解)
HELP:
经常使用git命令清单:http://blog.jobbole.com/95979/
参考git教程:https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000
常见git命令关联:
svn文件标识图