首页 > 代码库 > svn迁移到git
svn迁移到git
最近需要将项目从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 -scp -Rf .git/refs/remotes/origin/* .git/refs/heads/rm -Rf .git/refs/remotesgit remote add origin ssh://git@git.china.netease.com/welkin/batchserver.gitgit 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用户对应的邮箱帐号>
-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文件标识图
svn迁移到git