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用户对应的邮箱帐号>
  注意: 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 自行了解)

  1. trunk指定导出仓库的主干项目路径。
  2. branches指定svn的分支项目路径。

 

 

HELP:

 常用git命令清单:http://blog.jobbole.com/95979/

 参考git教程:https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000

 常见git命令关联:

 

svn文件标识图

以上是关于svn迁移到git的主要内容,如果未能解决你的问题,请参考以下文章

SVN如何迁移到Git?

如何同步迁移之后继续在SVN提交的代码到Git

SVN迁移到GIT

SVN迁移到git

聊聊如何从 SVN 迁移源码到 Git 仓库

从svn迁移到git