将代码从svn迁移到git

需求

工作里打算将代码从svn迁移到git,但svn毕竟用了一段时间,提交记录、tag、release等信息希望还能继续保留。

方案

git官方本身就给了一个教程,参见: Git与其他系统-迁移到Git

教程本身就交代了前因后果,我就不再赘述,基本按照流程走就可以,我这里只是说下我的步骤以及遇到的坑。

准备users.txt文件

我直接手写的,毕竟提交人不算多,也可以执行官方提供的命令: svn log ^/ --xml | grep -P "^<author" | sort -u | perl -pe 's/<author>(.*?)<\/author>/$1 = /' > users.txt

准备好users.txt之后,执行git svn clone命令

输入git svn clone命令后,在windows上后依次弹出3个输入框,依次输入: – windows用户验证框:输入windows登录密码
– svn用户名
– svn密码

输入后等待即可。

我执行的命令如下: git svn clone svn://xxx.xxx.xxx.xxx/yyy/ –no-metadata –authors-file=users.txt –no-minimize-url -s xxx git网页上给的命令,有提到--no-metadata是去掉svn的元数据,但如果不加入--no-minimize-url命令,git svn clone这条命令可能会去扫描更上层的svn目录。会有类似这样的提示信息: Initialized empty Git repository in /Users/doc/Test/Demo/.git/ Using higher level of URL: https://xxxxxxx/branch/android/project1 => https://xxxxxxxx/branch/android W: Ignoring error from SVN, path probably does not exist: (160013): Filesystem has no item: '/xxxxxxbranch/android' path not found W: Do not be alarmed at the above message git-svn is just searching aggressively for old history. This may take a while on large repositories ^Cecked through r290000

我记得如果你没权限的话会报错。保险起见,还是在命令行加入–no-minimize-url参数吧,主要是不缩小输入的地址。

报错:Author: xx not defined in users.txt file

如果你输入的authors.txt中用户映射没列全、svn的用户有遗漏,可能有如下报错: Author: xx not defined in users.txt file
此时记得修改authors.txt文件,删除整个文件夹,重新执行git svn clone命令。

注意
  • 请在一个空白的、没有与git或是svn关联的文件夹(最好就是新建一个文件夹)中执行git svn clone这条命令,否则操作结果可能比较怪,我一开始没留意,在一个git库中执行这命令,结果有点奇怪,就不多提了。
  • 这条命令的执行时间依赖于你的svn版本库内容的多寡,比如我迁移的svn大概用了半年多吧,提交记录、tag比较多,结果执行git svn clone这条命令大概执行了3个多小时……执行该命令时确保网络状况良好,然后你就可以去做别的事情了

git svn clone执行结束、没报任何错误的话,你会在你指定的文件夹内看到你想迁移的svn代码。接下来,按照git给的说明,继续执行后续命令,基本就没啥坑了,汇总命令列表见下面汇总

汇总

  1. 准备users.txt文件
  2. 准备好users.txt之后,执行git svn clone命令
  3. git for-each-ref refs/remotes/tags | cut -d / -f 4- | grep -v @ | while read tagname; do git tag “$tagname” “tags/$tagname”; git branch -r -d “tags/$tagname”; done
  4. git for-each-ref refs/remotes | cut -d / -f 3- | grep -v @ | while read branchname; do git branch “$branchname” “refs/remotes/$branchname”; git branch -r -d “$branchname”; done
  5. git remote add origin xxxx 这里需要写上你自己的git远端地址,比如gitlab上你创建的项目地址
  6. git push origin –all
  7. git push origin –tags

基本流程就这样,还是比较简单的

参考帖子

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值