svn迁移到git
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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.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到最新的版本的代码.
no-metadata:阻止git导出SVN包含的一些无用信息
authors-file:必须指定svn帐号在git中的映射
user.txt:存储svn账号与gitlab上账号的关联性,如下:
生成命令: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的对应关系。
如果不是上述这种命名法则,那你需要使用 --tags
, --branches
, --trunk
参数(请通过 git svn help
自行了解)
- trunk指定导出仓库的主干项目路径。
- branches指定svn的分支项目路径。
HELP:
常用git命令清单:http://blog.jobbole.com/95979/
参考git教程:https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000
常见git命令关联:
svn文件标识图
以上是关于svn迁移到git的主要内容,如果未能解决你的问题,请参考以下文章